我正在使用MassTransit(以及RabbitMq作为队列)对包含许多步骤的每条消息进行一些顺序处理。
我希望能够在IConsumeContext<MyMessage>
中的某个地方存储与每个特定消息相关的“处理状态”信息,例如,如果消息处理在步骤2中失败,则在下次重试时我会从第2步继续,不再重复第1步。
这可能吗?
我看到的一些可能的方法是改变消息本身,但我不知道这是否是标准的做事方式。
此外,邮件上有Headers
属性,但我不确定这是什么。
以前有人这样做过吗?
更新
我可能只使用带有循环的try/catch
块并在那里延迟,但我不知道是否会更好地避免这种情况。
答案 0 :(得分:2)
处理这类事情的最佳方法是通过Automatonymous传奇。重试是明确的,也是您域名的一部分。
我们已经在较低级别进行了重试,如果抛出异常,它会被重新放回队列并重试,直到达到最大重试次数。然后将消息丢弃在错误队列中。您也可以在上下文中调用RetryLater()
。标题中有一个重试计数,用于计算重试次数。