2011-01-06 79 views
4

我有一個成功處理消息的訂閱者,然後訂閱者繼續成功發佈另一條消息,指出發生了某個事件,我的問題是發佈後我試圖返回向初始消息和系統的發送者發送消息失敗,並顯示以下消息NServiceBus - 發佈後回覆消息

沒有爲消息NServiceBus.Unicast.Transport.CompletionMessage指定目標。消息無法發送。檢查配置文件中的UnicastBusConfig部分,並確保消息類型存在MessageEndpointMapping。

返回代碼如下:

Bus.Publish(orderMessage); 

Bus.Return((int)MySendBus.Core.ErrorCode.Ok); 

,並在app.config如下:

<configuration> 
    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/> 
    </configSections> 

    <MsmqTransportConfig InputQueue="MyServerInputQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5"/> 
</configuration> 

我添加了一個單播部分,仍然得到同樣的錯誤。我的理解是,NServicebus知道如何回覆郵件,我不應該指定一個隊列來回應除了在app.config中找到的MsmqTransportConfig輸入隊列。

是否有可能讓訂戶發佈消息,然後回覆消息的發送地點?

+0

你可以發佈你的單播節嗎?我已經使用Bus.Reply()取得了成功,這會對你有用嗎? – 2011-01-06 15:18:48

回答

7

如果使用Bus.Return(),那麼你必須註冊一個回調的客戶終端,像這樣:

Bus.Send<IRequestDataMessage>(m => 
      { 
       m.DataId = g; 
       m.String = "<node>it's my \"node\" & i like it<node>"; 
      }) 
       .Register(i => Console.Out.WriteLine(
            "Response with header 'Test' = {0}, 1 = {1}, 2 = {2}.", 
            Bus.CurrentMessageContext.Headers["Test"], 
            Bus.CurrentMessageContext.Headers["1"], 
            Bus.CurrentMessageContext.Headers["2"])); 

如果你想回到你的選擇,然後使用Bus.Reply的完整信息( )並在您的客戶端端點中編寫處理程序。我的完整樣本可以找到here

+0

謝謝亞當。你的樣品幫助我朝着正確的方向前進。 使用您的示例我意識到我錯過了最初消息的發件人中的MsmqTransportConfig。這解決了這個問題。 – Adam 2011-01-06 23:20:34