2014-09-01 59 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

相關問題