2011-01-19 73 views
0

我正在構建一個網站,它將命令發送到其他端點,以便 在域中發生效果更改。如果某個命令因商業原因而失敗,我希望能夠使用Bus.Reply()並將命令失敗消息 發送到TransportMessage中指定的ReturnAddress處的端點。有沒有辦法使用NServiceBus欺騙消息的返回地址?

在試圖完成此操作時,我已在web.config中設置了MsmqTransportConfig以具有合適的InputQueue值;撥打Bus.Reply()然後正確地工作 。但是,當在指定隊列中收到回覆時,網站將繼續使用它,這不是我想要發生的情況;我有另一個端點正在偵聽同一隊列以使用這些事件。

有沒有辦法有NServiceBus使用ReturnAddress頭所發送 消息,還是有辦法來指示過程不注重在MsmqTransportConfig指定的 iput隊列,或者一個方法來編程設置ReturnAddress值在TransportMessage

回答

2

事實證明,這是可能的。下面是配置塊我最終使用:

var config = Configure.WithWeb().StructureMapBuilder(ObjectFactory.GetInstance<IContainer>()).XmlSerializer(); 
config.UnicastBus().MsmqTransport(); 
config.Configurer 
    .ConfigureComponent<MsmqTransport>(ComponentCallModelEnum.Singleton) 
    .ConfigureProperty(t => t.InputQueue, "MyReturnQueue"); 
config.CreateBus().Start(); 

我沒有通過代碼看起來還沒搞清楚到底發生了什麼,但現在看來,如果沒有在web.config的MsmqTransportConfig進入文件,傳輸將不會監聽其輸入隊列。因此,通過在創建總線之前以編程方式設置InputQueue屬性,可以填充TransportMessageReturnAddress,但總線不會消耗該地址處的消息。

相關問題