【发布时间】:2018-03-10 10:31:57
【问题描述】:
我是 MassTransit 的新手(使用 rabbitmq),所以如果这是一个愚蠢的问题,请原谅我。
我只是想知道如何处理不成功的赔偿?所以所有重试都失败了,即没有补偿成功 - 我想消息应该进入一个死信队列,让我在以后手动重试一次,然后再试一次?
任何帮助将不胜感激。
【问题讨论】:
标签: rabbitmq masstransit
我是 MassTransit 的新手(使用 rabbitmq),所以如果这是一个愚蠢的问题,请原谅我。
我只是想知道如何处理不成功的赔偿?所以所有重试都失败了,即没有补偿成功 - 我想消息应该进入一个死信队列,让我在以后手动重试一次,然后再试一次?
任何帮助将不胜感激。
【问题讨论】:
标签: rabbitmq masstransit
如果您正在使用路由清单,并且在补偿活动期间引发异常,则会发布 RoutingSlipCompensationFailed 事件。此时,没有重试,没有错误/死信等。路由单在该点被认为“结束”,并且出错的分布式事务(从而导致调用补偿方法)结束。
使用路由单时,观察路由单运行时产生的事件(活动完成/补偿/故障,以及整体路由单完成/故障/补偿失败)非常重要 - 通常使用 saga。
我建议查看我的 GitHub 上的 Demo-Registration 示例,以了解如何结合使用 sagas 和路由单来执行可靠的分布式事务。
【讨论】:
如果重试策略无法帮助处理邮件并且未配置重新传递(二级重试),则邮件将进入有害队列。毒物队列在 MassTransit 中称为“错误队列”。
毒物队列与您的接收端点队列具有相同的队列名称,带有_error 后缀。
Deadletter 是另一回事,它用于端点接收到但端点不知道如何处理的消息。死信队列在 MassTransit 中称为“跳过的消息队列”,后缀为 _skipped。
更新:这是通用的 MassTransit 行为。正如克里斯在另一个答案中所述,Courier 的工作方式不同。我不清楚问题是关于使用路由单。
【讨论】: