Sme*_*iff 5 c# service-broker sqldependency sql-server-2012
我当前正在将SqlDependency与SQL Server 2012 Service Broker一起使用,并且希望能够配置两台服务器,既可以侦听Service Broker并提取队列,但消息总数应仅从队列中提取一次。每台机器都应尝试降低其能力,但是如果有太多机器进来,则应平衡其能力。现在,我启动该程序的两个实例,并且都在侦听。一旦添加了新消息,它们都会从队列中提取同一条消息并运行代码。
SqlDependency不是我想要做什么的解决方案吗?什么是更好的解决方案呢?
您不需要 SQL 通知或 SQLDependency。每个实例可以执行:
WAITFOR(
RECEIVE TOP(1) * FROM {NameOfQueue}
), TIMEOUT @timeoutvalue;
Run Code Online (Sandbox Code Playgroud)
该命令将等待,保持连接打开,直到消息可用或发生超时。超时时您不会收到任何消息,因此只需连接并重试。
每条消息只能由单个进程接收。在内部,Server Broker 队列中的行被锁定,其他读取器将READPAST锁定的行。
因为 SQL 可能有点棘手,所以我编写了一个我认为有用的包装类,您可以随意使用。
| 归档时间: |
|
| 查看次数: |
1334 次 |
| 最近记录: |