【发布时间】:2023-03-13 19:12:02
【问题描述】:
设置: 我有几个订阅者通过 MSMQ 在同一台机器上订阅由发布者生成的事件。订阅者使用两个不同的端点名称,并在其各自的进程中运行。 (这是 NSB 4.6.3)
场景: 现在,如果我对其中一个订阅者做了一些“坏事”(比如删除 MSMQ 中接收消息的适当权限,或者直接删除 MSMQ 中的队列......),然后调用 Bus.Publish(),我仍然会有一个事件成功发布到“好”订阅者(如果订阅存储中订阅者列表中好的订阅者在坏订阅者之前),或者没有成功(如果坏订阅者在好的订阅者之前)。
结论: 这里的结果是 Bus.Publish() 似乎不是事务性的,因为要使向订阅者的发布全部成功或全部失败。根据列表中订阅者的顺序,最终结果可能会有所不同。
问题: 这种行为是设计使然吗? 这背后的想法是什么? 如果我想让这个调用具有事务性,推荐的方法是什么? (一个选项似乎在我的代码中将 Bus.Publish() 包含在 TransactionScope 中......)
【问题讨论】:
标签: nservicebus