Sql server sqlserver中可靠的异步处理
部分服务由第三方提供给我们的客户。在其远程服务器上创建的数据将复制到本地SQL server。 我需要在我无法直接访问数据库的第三方服务器上执行一些工作。他们为此公开了一组API。该工作由SQL server代理作业在链接的SQL server上执行 业务场景:客户可以接收“徽章”。可以通过调用第三方服务器上的Sql server sqlserver中可靠的异步处理,sql-server,database,sql-server-2008-r2,message-queue,service-broker,Sql Server,Database,Sql Server 2008 R2,Message Queue,Service Broker,部分服务由第三方提供给我们的客户。在其远程服务器上创建的数据将复制到本地SQL server。 我需要在我无法直接访问数据库的第三方服务器上执行一些工作。他们为此公开了一组API。该工作由SQL server代理作业在链接的SQL server上执行 业务场景:客户可以接收“徽章”。可以通过调用第三方服务器上的UpdateCustomerBadgeInfoweb方法将徽章提供给客户 因此,自动化任务的典型需求如下所示: “查找当天登录超过50次的所有客户,给他们[没有生命]徽章,并向他们发送短信
UpdateCustomerBadgeInfo
web方法将徽章提供给客户
因此,自动化任务的典型需求如下所示:
“查找当天登录超过50次的所有客户,给他们[没有生命]
徽章,并向他们发送短信通知”
算法是:
- Select all the matching accounts into a #TempTable
for each customer record:
- Call UpdateCustomerBadgeInfo() method (via CLR)
- If successfully updated badge info-> Enqueue SMS message (queue table)
- Log successful actions (so that the record will not be picked up next time)
它现在的工作方式最大的问题是,在WHILE循环中处理大型数据集需要很多时间
因此,第三方提供商创建了一个解决方案来执行客户数据的批量更新。他们在本地SQL server上创建了一个表,向该表提交批处理更新请求,然后由他们的服务进行验证和处理
问题是:
如何更改上述算法以适应此异步模型?只有在我正确理解情况时,此答案才有效:
- 用于公开web方法以逐个更新客户的第三方服务器
- 现在,他们希望从SQLServer表中获取这些信息,以便插入/更新/删除
- 您只需将与客户相关的请求填入此表,这些请求将在稍后处理
- 当与客户相关的信息得到更新时,您必须执行一些额外的本地操作(队列SMS、日志活动)
希望能有所帮助。Ozren,感谢您的快速回复!因此,基本上,如果到目前为止,所有工作都是在一个过程中完成的(有一个WHILE循环),那么现在我必须将工作分为两个单独的工作,一个是将徽章信息更新请求排队,另一个是读取已处理行的状态并发送SMS?这将是一种方法。另一种方法是让相同的作业依次处理当前响应,然后发送新请求。这样,您就不必担心自己任务之间的同步问题。然而,有两份工作是更模块化的方法。