1

通过阅读 wiki 中的移交工作部分,您似乎可以使用单向模式在 rebus 中进行单向发布。但我认为单向模式只允许 bus.send?

如果在一个场景中,我有两个应用程序都可以发布SomethingHappened消息,但只有一个应用程序应该处理来自 ProcessManager 的回复,例如DoSomethingElse,我应该如何为两个应用程序配置 rebus?

问候

4

1 回答 1

1

但我认为单向模式只允许 bus.send?

bus.Publish只要它具有正确设置的订阅存储,没有什么会阻止您从单向客户端进行操作。如果有其他东西用一些订阅填充订阅存储(例如,你,通过手动将它们插入数据库,或者让另一个发布者处理订阅/取消订阅),那么当你发布时可能会发生一些事情;)

我应该如何为这两个应用程序配置 rebus?

在没有完全清楚您的场景的情况下,我认为

  • 一个发布者 A 有一个输入队列:publisherA
  • 另一个发布者 B 没有输入队列(即它是单向客户端)
  • 两个发布者共享他们的订阅存储(例如 SQL Server 中的一个表)
  • 两个发布者从程序集发布消息StuffToPublish
  • 其他端点具有映射StuffToPublish到的端点映射publisherA- 因此,bus.Subscribe具有事件类型的aStuffToPublish将使发布者 A 建立订阅
  • 来自 A 和 B 的已发布消息将发送给相同的订阅者,因为它们共享订阅存储

如果您希望发布者 A 处理回复,即使事件是由发布者 B 发布的,您可以让 B 提供rebus-return-address标头(否则会自动设置,如果 B 有输入队列),如下所示:

bus.AttacheHeader(someEvent, Headers.ReturnAddress, "publisherA");

这样,回复将被发送到publisherA输入队列。

于 2014-09-01T04:56:17.903 回答