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 中有一个重试计数,用于计算重试次数。
我正在使用 MassTransit(和用于队列的 RabbitMq)对涉及多个步骤的每条消息进行一些顺序处理。
我希望能够在 IConsumeContext<MyMessage>
中的某处存储一个 "processing-state" 信息,该信息将与每条特定消息相关,例如,如果消息处理在第 2 步失败,则下次重试我将从第 2 步继续,不再重复第 1 步。
这可能吗?
我看到的一些可能的方法是更改消息本身,但我不知道这是否是标准的处理方法。
另外,消息上有一个Headers
属性,但我不知道这是干什么的。
以前有人做过吗?
更新:
我可能只使用 try/catch
带有循环和延迟的块,但我不知道避免这种情况是否更好。
处理此类问题的最佳方法是通过 Automatonymous 制作 Saga。使重试明确并成为您领域的一部分。
我们已经在较低级别进行了重试,如果抛出异常,它会被抛回 queue 并重试,直到达到最大重试次数。然后在错误queue中抛出消息。您还可以在上下文中调用 RetryLater()
。 header 中有一个重试计数,用于计算重试次数。