使用Sagas具有可恢复性

时间:2018-09-20 15:07:07

标签: nservicebus nservicebus-sagas

对于来自Sagas的邮件的恢复,我们遇到了问题。

当Saga发送消息进行处理时,消息处理程序有时会因异常而失败。当前,我们使用try / catch,并且在引发异常时,我们会向Saga发送失败消息以进行“回复”。这种方法的问题在于,由于我们正在处理消息处理程序中的错误,因此不会发生可恢复性重试。

我的想法是向管道中添加自定义逻辑,如果Command消息实现了一些特殊的接口,则如果发生异常(重试失败后),则自定义逻辑将向Saga发送失败的消息响应,但是我不知道在哪里插入管道,重试失败后将允许我发送消息。

这是有效的方法吗?如果没有,重试后如何解决Saga到Handler的失败消息?

1 个答案:

答案 0 :(得分:0)

您可以使用immediate dispatch来等待处理程序完成。

但是,我想提出一种替代方法。为什么不在传奇中创建超时?如果在一定的时间跨度内未收到来自处理程序处理者的答复,则采取其他方法。处理程序将获得5分钟的时间,如果5分钟内没有响应,我们将执行其他操作。如果它在6分钟后仍然响应,我们知道我们已经采用了替代路径(使用布尔标志或将其存储在saga数据中),并搁置为时已晚的答复。

如果您要以此为基础进行讨论,请查看我们的community platform