NServiceBus 事务何时结束,发送给订阅者或所有订阅者都收到消息时?

When does NServiceBus transaction end, when sending to a subscriber or when all subscribers have received their messages?

我想知道在特定场景下,NServiceBus 事务究竟何时结束。场景如下:

  1. 队列中收到了消息。
  2. 处理程序读取消息并从数据库加载一些内容。
  3. 处理程序向 3 个订阅者发布一个事件。

交易(默认情况下)是否在以下时间结束:

请注意,订阅者 不是系统的一部分,不一定使用 NServiceBus,甚至 .NET。

当传入消息的所有消息处理程序都已成功 运行 完成(或在失败时回滚)时,它以提交结束。

在您的场景中,将在事件发布并被底层传输接受之后立即发生。对于具有存储转发架构的 MSMQ,这意味着写入每个订阅者的传出队列。对于像 RabbitMQ 这样的代理传输,这意味着写入代理上的磁盘。 (默认情况下。您可以通过显式更改选项来使其更加危险)