2014-09-01 20 views
1

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

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

问候

回答

1

但我认为一个方式模式只允许bus.send?

只要它具有正确设置的订阅存储,没有什么会阻止您从单向客户端执行bus.Publish。如果别的东西填充该预订存储一些订阅(例如,你,通过在db手动插入它们,或者有其他出版商处理订阅/取消),那么事情可能实际上在发布发生;)

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

而不必您的方案完全清晰的图像,我在想,

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

如果你想发布方的处理答复即使该事件被发布商B公布,可以使b提供rebus-return-address头(否则会被自动设置,有B的输入队列)像这样:

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

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

+0

再次感谢。正是我需要的! – Yin 2014-09-01 07:50:01

相关问题