MassTransit补偿失败 - 死亡?

时间:2018-03-10 10:31:58

标签: rabbitmq masstransit

我是MassTransit的新手(使用rabbitmq),如果这是一个愚蠢的问题,请原谅我。

我只是想知道如何处理不成功的赔偿?所以所有的重试都失败了,即没有补偿成功 - 我想这个消息应该进入一个死信通道队列,以便我可以在以后再次手动重试,然后再次重试?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果重试策略无法帮助处理消息并且没有配置重新传递(二级重试),则消息将转到中毒队列。毒药队列被称为"错误队列"在MassTransit。

毒性队列与接收端点队列具有相同的队列名称,后缀为_error

Deadletter是另一回事,它适用于端点接收的消息,但端点不知道如何处理它。 Deadletter队列称为"跳过消息队列"在MassTransit中,后缀为_skipped

更新:这是通用的MassTransit行为。克里尔在另一个答案中描述了Courier的不同之处。我不清楚问题是关于使用路由单。

答案 1 :(得分:2)

如果您正在使用路由单,并且在补偿活动期间抛出异常,则会发布RoutingSlipCompensationFailed事件。此时,没有重试,没有错误/死信等。路由单被视为"结束"此时,出现故障的分布式事务(从而导致调用补偿方法)结束了。

使用路由滑动时,观察路由滑动运行时产生的事件(活动完成/补偿/故障,以及整体路由滑动完成/故障/补偿失败)非常重要 - 通常使用传奇

我建议在我的GitHub上查看Demo-Registration示例,以了解如何结合使用传单和路由单来执行可靠的分布式事务。

https://github.com/phatboyg/Demo-Registration