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

Sme*_*iff 5 c# service-broker sqldependency sql-server-2012

我当前正在将SqlDependency与SQL Server 2012 Service Broker一起使用,并且希望能够配置两台服务器,既可以侦听Service Broker并提取队列,但消息总数应仅从队列中提取一次。每台机器都应尝试降低其能力,但是如果有太多机器进来,则应平衡其能力。现在,我启动该程序的两个实例,并且都在侦听。一旦添加了新消息,它们都会从队列中提取同一条消息并运行代码。

SqlDependency不是我想要做什么的解决方案吗?什么是更好的解决方案呢?

Jos*_*gle 1

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

WAITFOR(
    RECEIVE TOP(1) * FROM {NameOfQueue}
), TIMEOUT @timeoutvalue;
Run Code Online (Sandbox Code Playgroud)

该命令将等待,保持连接打开,直到消息可用或发生超时。超时时您不会收到任何消息,因此只需连接并重试。

每条消息只能由单个进程接收。在内部,Server Broker 队列中的行被锁定,其他读取器将READPAST锁定的行。

因为 SQL 可能有点棘手,所以我编写了一个我认为有用的包装类,您可以随意使用