我们目前有两个数据中心处于主动 – 主动模式,并在两个数据中心之间使用SQL复制(延迟很小)。 我正在开发一个新的进程,它将使用SQL Server Broker Service(外部激活器)来处理基于时间的作业队列。
目前有1200个职位,每个职位都应该每15分钟安排一次,所以我决定利用BEGIN CONVERSATION TIMER来安排工作和一个外部激活器从队列中检索消息。 理论上(并且有一些有限的testing),一切似乎都会正常工作。
所以我的问题是与SQL复制有关 – 在这个场景中,
我只是不太清楚这个场景,我们想避免两次运行相同的工作。 我search和search(主要是谷歌),但无法find任何与我的情况相关的东西。 任何澄清/方向在这个问题将不胜感激。
TIA。
复制队列是不行的,因为它们不能被复制。 但是我推荐一些完全不同的东西: Service Broker负载均衡 。 你可以有一系列的服务(在你的情况下,两个),并申报到每个服务的路线。 当您启动与这些服务的对话时,Service Broker将负载平衡跨这些服务的对话(它们基于conversation_id进行散列)。 所以,如果你有1000个工作要安排,比如说10个可以执行这些工作的工作站,你可以在每个工作站上创build一个执行器服务(例如“工人”服务,它们都将命名相同),然后发送消息到“工人”,不指定哪个工人。 SSB将负载平衡所有可能的目标中的作业(消息),从而导致负载平衡的调度器。 好处是一切都是部署时间configuration。 您可以添加更多的工作人员,而无需修改应用程序中的单行代码,只需添加新的路由即可。
我build议你阅读链接的文章,因为声明多个路由到相同的服务有点棘手,因为路由中的“broker_instance”起着至关重要的作用。