在rebus中发布的一种方式?

时间:2014-09-01 02:05:59

标签: rebus

通过阅读wiki中的Handing off work部分,您似乎可以通过单向模式以单向方式发布rebus。但我认为单向模式只允许bus.send?

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

此致

1 个答案:

答案 0 :(得分:1)

  

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

只要具有正确设置的订阅存储,任何事都不会阻止您从单向客户端执行bus.Publish。如果其他东西用一些订阅填充该订阅存储(例如,通过在db中手动插入它们,或者让另一个发布者处理订阅/取消订阅),那么当您发布时可​​能会发生某些事情;)

  

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

如果没有完全清晰的情景图像,我就会想到

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

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

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

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