2014-09-02 55 views
0

我在NServiceBus中創建了一個SAGA。這個傳奇是處理一些字符串,必須進行轉換,然後驗證並導入。這三項行動是單獨的服務。我想在NServiceBus中將這些操作作爲獨立的處理程序。我正在使用NServiceBus中的請求/回覆功能。像這樣:在SAGA中使用請求/回覆NserviceBus

Bus.Send<TransformRequest>("Backend", m => 
    { 
     m.string = string; 
     m.MessageId = messageId; 
    }) 
    .Register(i => 
    { 
     Console.WriteLine("transform finished") 
    }); 

transformationHandler如下。

public void Handle(TransformRequest message) 
    { 
     var transformationResult = _transformationService.Transform(message.string); 

     var response = new TransformResponse() 
     { 
      string= transformationResult, 
      messageId = message.messageId, 
     }; 

     Bus.Reply(response); 
    } 

我的問題如下。當請求發送到transformationHandler時。消息被髮送到消息隊列。然後假設,服務器崩潰。服務器重新啓動,服務器拿起TransformationRequest,它是否工作,並且想要回復佐賀,但是怎麼做?這個傳奇不再活着,不能處理.Register。我如何處理這個問題?

謝謝。

+0

您可以刪除寄存器,然後執行bus.reply() – 2014-09-02 13:02:51

回答

1

NServiceBus會自動爲您找到響應消息中使用標題的saga實例。

由於肖恩提到你需要跳過.Register併爲轉換結果添加一個處理程序。原因是使用.Register的回調函數存儲在內存中,因此無法在重啓時保存下來

+0

感謝您使用IHandleMessages 現在使用ConfigureHowToFindSaga ()。奇蹟般有效。 – StefanHa 2014-09-02 14:32:11