Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
NServiceBus阻止两个使用者处理消息?_Nservicebus_Nservicebus Distributor - Fatal编程技术网

NServiceBus阻止两个使用者处理消息?

NServiceBus阻止两个使用者处理消息?,nservicebus,nservicebus-distributor,Nservicebus,Nservicebus Distributor,NServiceBus文档列出了SQL传输的一个好处: 队列支持竞争消费者(同一个队列的多个实例) 端点从同一队列馈出),因此不需要 分销商,以扩大加工范围 如果多个使用者已订阅同一队列,NServiceBus会阻止多个使用者处理消息吗 在处理消息之前,NServiceBus是否锁定整个表?或者消息是否标记为“正在处理”?SQL传输使用非常特定的锁定提示来锁定行,并使其他竞争线程忽略当前锁定的任何行 从(我写这篇文章时的当前版本)开始,使用的SQL,但我重新格式化了,是: WITH messa

NServiceBus文档列出了SQL传输的一个好处:

队列支持竞争消费者(同一个队列的多个实例) 端点从同一队列馈出),因此不需要 分销商,以扩大加工范围

如果多个使用者已订阅同一队列,NServiceBus会阻止多个使用者处理消息吗


在处理消息之前,NServiceBus是否锁定整个表?或者消息是否标记为“正在处理”?

SQL传输使用非常特定的锁定提示来锁定行,并使其他竞争线程忽略当前锁定的任何行

从(我写这篇文章时的当前版本)开始,使用的SQL,但我重新格式化了,是:

WITH message AS 
(
    SELECT TOP(1) * 
    FROM [{Schema}].[{Queue}] WITH (UPDLOCK, READPAST, ROWLOCK) 
    ORDER BY [RowVersion] ASC
) 
DELETE FROM message 
OUTPUT deleted.Id, deleted.CorrelationId, deleted.ReplyToAddress, 
       deleted.Recoverable, deleted.Expires, deleted.Headers, deleted.Body;
它使用将源数据限制为要返回的一行,然后使用以下锁定提示:

  • UPDLOCK
    -锁定数据以更新数据
  • readpass
    -忽略锁定的行并获取下一个解锁的行
  • ROWLOCK
    -强制行级锁,不要升级到页面锁或表锁

通过将整个事件作为delete执行,然后输出将要删除的数据,我们可以读取数据,如果事务提交,则删除该行。否则,如果事务回滚,则锁将被释放,该行将等待下一个竞争消费者拾取。

SQL传输使用非常特定的锁提示来锁定一行,并使其他竞争线程忽略当前锁定的任何行

从(我写这篇文章时的当前版本)开始,使用的SQL,但我重新格式化了,是:

WITH message AS 
(
    SELECT TOP(1) * 
    FROM [{Schema}].[{Queue}] WITH (UPDLOCK, READPAST, ROWLOCK) 
    ORDER BY [RowVersion] ASC
) 
DELETE FROM message 
OUTPUT deleted.Id, deleted.CorrelationId, deleted.ReplyToAddress, 
       deleted.Recoverable, deleted.Expires, deleted.Headers, deleted.Body;
它使用将源数据限制为要返回的一行,然后使用以下锁定提示:

  • UPDLOCK
    -锁定数据以更新数据
  • readpass
    -忽略锁定的行并获取下一个解锁的行
  • ROWLOCK
    -强制行级锁,不要升级到页面锁或表锁
通过将整个事件作为delete执行,然后输出将要删除的数据,我们可以读取数据,如果事务提交,则删除该行。否则,如果事务回滚,则锁被释放,行等待下一个竞争消费者拾取