【问题标题】:Using Request/Reply in SAGA NserviceBus在 SAGA NserviceBus 中使用请求/回复
【发布时间】:2014-09-02 09:33:01
【问题描述】:

我正在 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。我该如何处理这个问题?

谢谢。

【问题讨论】:

  • 你可以放下寄存器,直接做bus.reply()

标签: request nservicebus reply nservicebus-sagas


【解决方案1】:

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

正如 Sean 所说,您需要跳过 .Register 并在您的传奇中为转换结果添加一个处理程序。原因是使用 .Register 的回调存储在内存中,因此无法在重启后继续存在

【讨论】:

  • 谢谢,我现在使用 IHandleMessages 和 ConfigureHowToFindSaga()。像魅力一样工作。
猜你喜欢
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多