MassTransit - 在重试之间存储状态的位置

MassTransit - Where to store state between retries

我正在使用 MassTransit(和用于队列的 RabbitMq)对涉及多个步骤的每条消息进行一些顺序处理。

我希望能够在 IConsumeContext<MyMessage> 中的某处存储一个 "processing-state" 信息,该信息将与每条特定消息相关,例如,如果消息处理在第 2 步失败,则下次重试我将从第 2 步继续,不再重复第 1 步。

这可能吗?

我看到的一些可能的方法是更改​​消息本身,但我不知道这是否是标准的处理方法。

另外,消息上有一个Headers 属性,但我不知道这是干什么的。

以前有人做过吗?

更新:

我可能只使用 try/catch 带有循环和延迟的块,但我不知道避免这种情况是否更好。

处理此类问题的最佳方法是通过 Automatonymous 制作 Saga。使重试明确并成为您领域的一部分。

我们已经在较低级别进行了重试,如果抛出异常,它会被抛回 queue 并重试,直到达到最大重试次数。然后在错误queue中抛出消息。您还可以在上下文中调用 RetryLater()。 header 中有一个重试计数,用于计算重试次数。