【问题标题】:When does NServiceBus transaction end, when sending to a subscriber or when all subscribers have received their messages?NServiceBus 事务什么时候结束,什么时候发送给一个订阅者,或者什么时候所有订阅者都收到了他们的消息?
【发布时间】:2015-05-25 11:59:57
【问题描述】:
我想知道 NServiceBus 事务在特定场景中何时结束。场景如下:
- 在队列中收到消息。
- 处理程序读取消息并从数据库加载一些内容。
- 处理程序向 3 个订阅者发布事件。
交易是否(默认)在以下时间结束:
- 答:活动已经发布了吗?
- B:或者当事件已被所有 3 个订阅者发布并收到时?
请注意,订阅者不是系统的一部分,也不一定使用 NServiceBus,甚至 .NET。
【问题讨论】:
标签:
c#
transactions
nservicebus
publish-subscribe
【解决方案1】:
当传入消息的所有消息处理程序已成功运行完成(或在失败的情况下回滚)时,它以提交结束。
在您的场景中,这将是在事件发布并被底层传输接受之后。对于具有存储转发体系结构的 MSMQ,这意味着写入每个订阅者的传出队列。对于像 RabbitMQ 这样的代理传输,这意味着写入代理上的磁盘。 (默认情况下。您可以通过显式更改选项使这更加危险)