Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以将SqlDependency与多个侦听器/负载平衡一起使用吗_C#_Sql Server 2012_Service Broker_Sqldependency - Fatal编程技术网

C# 我可以将SqlDependency与多个侦听器/负载平衡一起使用吗

C# 我可以将SqlDependency与多个侦听器/负载平衡一起使用吗,c#,sql-server-2012,service-broker,sqldependency,C#,Sql Server 2012,Service Broker,Sqldependency,我目前正在使用SQL Server 2012 Service Broker的SqlDependency,我希望能够配置两台服务器,同时侦听Service Broker和退出队列,但消息只应在总计一次后退出队列。每台机器都应该试着尽可能地拉下,但如果有太多的机器进来,它应该在尽可能拉下的过程中保持平衡。现在我启动两个程序实例,两个都在监听。添加新消息后,它们都会从队列中提取相同的消息并运行代码 SqlDependency不是我想要做的事情的解决方案吗?对于这样的事情,什么是更好的解决方案 添加新消

我目前正在使用SQL Server 2012 Service Broker的SqlDependency,我希望能够配置两台服务器,同时侦听Service Broker和退出队列,但消息只应在总计一次后退出队列。每台机器都应该试着尽可能地拉下,但如果有太多的机器进来,它应该在尽可能拉下的过程中保持平衡。现在我启动两个程序实例,两个都在监听。添加新消息后,它们都会从队列中提取相同的消息并运行代码

SqlDependency不是我想要做的事情的解决方案吗?对于这样的事情,什么是更好的解决方案

添加新消息后,它们都会从队列中提取相同的消息并运行代码

您描述的行为是SQLDependency的工作方式。如果有多个侦听器,则会通知所有侦听器。例如,您可以在

请注意所有虚拟机如何接收来自SQL Server的通知,包括启动更新的虚拟机

如果要在工作VM池中分发SQL通知,则需要一种共享状态的方法。请注意,SQL通知仅表示发生了变化,而不表示发生了什么变化。一种方法是向数据库中添加一个表,作为作业或操作的队列。订阅者可以在每次通知时查询此队列,并通过更新或从此表中删除来声明操作。(必须在表上配置适当的锁)


或者,您可以使用其他共享状态工具(如消息队列(如RabbitMQ)或分布式缓存(如Redis))来完成此操作。

您不需要SQL通知或SQLDependency。每个实例都可以执行:

WAITFOR(
    RECEIVE TOP(1) * FROM {NameOfQueue}
), TIMEOUT @timeoutvalue;
此命令将等待连接打开,直到消息可用或超时发生。在超时时,您没有收到任何消息,因此只需连接并重试

每个消息只能由单个进程接收。在内部,服务器代理队列中的行被锁定,其他读卡器将读取锁定的行


因为SQL可能有点棘手,所以我写了一篇我认为有用的文章。

你是,还是仅仅是?(文档中说“如果未指定队列名称,SqlDependency将在服务器中创建一个临时队列和服务,用于整个流程,即使该流程涉及多个AppDomain。该队列和服务将在应用程序关闭时自动删除。”)我自己配置了队列,并告诉SqlDependency使用该队列。感谢您在这方面没有太多可用的文档。。。该表如何充当作业队列?我需要另一套逻辑来划分这项工作,不是吗?或者你是说避免使用MessageBroker,只是不断地查询数据库中的新数据,在标记它已被使用的行上加锁等等。谢谢!我把它和一个触发器结合起来,把它设置成一个无限循环,它很正常。我最终不必使用您的包装器类,但我将对此进行研究。该链接已断开:新链接会被删除吗?