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

时间:2015-04-27 09:37:26

标签: rabbitmq masstransit

我正在使用MassTransit(以及RabbitMq作为队列)对包含许多步骤的每条消息进行一些顺序处理。

我希望能够在IConsumeContext<MyMessage>中的某个地方存储与每个特定消息相关的“处理状态”信息,例如,如果消息处理在步骤2中失败,则在下次重试时我会从第2步继续,不再重复第1步。

这可能吗?

我看到的一些可能的方法是改变消息本身,但我不知道这是否是标准的做事方式。

此外,邮件上有Headers属性,但我不确定这是什么。

以前有人这样做过吗?

更新

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

1 个答案:

答案 0 :(得分:2)

处理这类事情的最佳方法是通过Automatonymous传奇。重试是明确的,也是您域名的一部分。

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