【问题标题】:How to write a polling service in SQL Server?如何在 SQL Server 中编写轮询服务?
【发布时间】:2019-04-19 14:40:16
【问题描述】:

我有两张桌子employeedepartment

员工

Id, Name, JoiningDate, SpecialRegistrationDone, DepartmentId

部门

DepartmentId, Name

DepartmentId = 2Name = "AI"有专门的部门。

有一个 Java 服务将数据推送到 EmployeeDepartment 表。

现在,我要写一个满足条件的轮询服务(轮询频率15分钟一次)

select e.* 
from Employee e
inner join Department d on e.DepartmentId = d.DepartmentId
                        and e.DepartmentId = 2
                        and e.JoiningDate > cast(GetDate() as date)
                        and e.specialRegistrationDone = 0

如果提取了任何记录,则调用 Web 服务,例如 http://specialdepartmentregistration/register 并在那里传递员工详细信息。

一种编写方法是编写一个 Java 服务,该服务轮询数据库并执行此查询,获取结果并调用 Web 服务以获取结果集。

我正在考虑在 SQL Server 端创建一个服务,该服务仅执行查询并调用 Web 服务。我该怎么写?在 SQL Server 2014 中甚至可能吗?

【问题讨论】:

  • 只是一个想法,但是实现一个调用服务器端脚本的 cron 作业会不会容易得多,该脚本负责查询数据库,并在需要时调用 Web 服务?跨度>
  • 您无法在内部 T-SQL 中编写任何东西来将数据推送到Web 服务。它必须是外部的东西。虽然您可以使用系统 com 存储过程,但这是不可靠且不受支持的
  • 换一种说法,数据库不应该调用长时间运行的、阻塞的外部服务,如网络服务。另一方面,预定的工作可以很容易地做到这一点
  • database 将如何限制对该服务的请求以避免泛滥?它将如何处理错误响应?它将如何重试失败的请求?所有这些对于小型控制台应用程序或脚本来说都是微不足道的。在 SQL 中这样做是不可能的
  • 顺便说一句,我使用 SSIS、定制的命令行工具和计划作业每 15 分钟轮询一百万行表,并调用航空公司 Web 服务以获取新数据,将其存储到数据库中并结合所有这些东西在一起。调用 Web 服务 HttpClient,使用 Polly 实现重试,使用 TPL 数据流创建具有节流功能的处理管道很容易。即使在 T-SQL 中进行单个 HTTP 调用,即使使用 SQLCLR 也太棘手了,更不用说重试、并发请求和限制

标签: sql sql-server


【解决方案1】:

这是一种实现您想要实现的目标的方法:

第一步: How to run a stored procedure in sql server every hour?

Step-2:在存储过程中编写业务逻辑,检查数据

第 3 步: 调用/发布到具有 CLR 集成的 Web 服务,如上所述 here

或使用SQL Server Service Broker

不建议按照您计划的方式实施。数据库应该只专注于存储数据。

相反,您应该让 CRON 服务定期访问您的应用程序。然后根据需要从应用程序查询数据库并发布到 Web 服务。

或者,在您的应用程序中运行计划服务,您的应用程序可以如上所述检查数据库。 Quartz 是一个可以用于此目的的库。

【讨论】:

  • 感谢会尝试 sql server 服务代理方法
猜你喜欢
  • 1970-01-01
  • 2011-05-29
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多