在SAGA NserviceBus中使用请求/回复

时间:2014-09-02 09:33:02

标签: request nservicebus reply nservicebus-sagas

我在NServiceBus中创建了一个SAGA。这个传奇正在处理一些必须转换然后验证并最终导入的字符串。这三个行动是单独的服务。我想将这些操作作为NServiceBus中的单独处理程序。我在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,它是否正常工作并希望对Saga做回复,但是如何?传奇不再存在,无法处理.Register。我该如何处理这个问题?

谢谢。

1 个答案:

答案 0 :(得分:2)

NServiceBus将自动为您使用响应消息中的标头找到saga实例。

正如Sean所提到的,你需要跳过。注册并在你的传奇中添加转换结果的处理程序。原因是使用.Register的回调存储在内存中,因此在重启后无法生存