NServiceBus 事务何时结束,发送给订阅者或所有订阅者都收到消息时?
When does NServiceBus transaction end, when sending to a subscriber or when all subscribers have received their messages?
我想知道在特定场景下,NServiceBus 事务究竟何时结束。场景如下:
- 队列中收到了消息。
- 处理程序读取消息并从数据库加载一些内容。
- 处理程序向 3 个订阅者发布一个事件。
交易(默认情况下)是否在以下时间结束:
- 答:活动发布了吗?
- B:或者当事件已发布并被所有 3 个订阅者接收时?
请注意,订阅者 不是系统的一部分,不一定使用 NServiceBus,甚至 .NET。
当传入消息的所有消息处理程序都已成功 运行 完成(或在失败时回滚)时,它以提交结束。
在您的场景中,将在事件发布并被底层传输接受之后立即发生。对于具有存储转发架构的 MSMQ,这意味着写入每个订阅者的传出队列。对于像 RabbitMQ 这样的代理传输,这意味着写入代理上的磁盘。 (默认情况下。您可以通过显式更改选项来使其更加危险)
我想知道在特定场景下,NServiceBus 事务究竟何时结束。场景如下:
- 队列中收到了消息。
- 处理程序读取消息并从数据库加载一些内容。
- 处理程序向 3 个订阅者发布一个事件。
交易(默认情况下)是否在以下时间结束:
- 答:活动发布了吗?
- B:或者当事件已发布并被所有 3 个订阅者接收时?
请注意,订阅者 不是系统的一部分,不一定使用 NServiceBus,甚至 .NET。
当传入消息的所有消息处理程序都已成功 运行 完成(或在失败时回滚)时,它以提交结束。
在您的场景中,将在事件发布并被底层传输接受之后立即发生。对于具有存储转发架构的 MSMQ,这意味着写入每个订阅者的传出队列。对于像 RabbitMQ 这样的代理传输,这意味着写入代理上的磁盘。 (默认情况下。您可以通过显式更改选项来使其更加危险)