功能描述
异常重试指的是当消费者处理消息异常失败时,为保证数据最终一致性,通过设置重试策略来对消息进行重复再消费。对于重试策略我们指定延迟多长时间重试一次,重试多少次,以及时间单位等。
策略描述
原理:利用rabbitmq的死信原理,参照上一篇文章rabbimq队列之死信队列和延迟队列
参数:TimeUnit(延迟时间单位),retryDelayTime(long型,失败后过多久的时间执行),retries(int型,重试次数)
原理图:
其中,有几个点需要说明一下
1.normal_exchange_delay和normal_queue_delay是死信队列,设置了队列属性x-message-ttl的属性,即指定了延时时间,达到x-message-ttl设置的时间未消费的就会自动路由到normal_exchange_requeue交换器,从而实现了延迟重试。这里需要解释的是为什么要重新创建一个新的交换器normal_exchange_requeue:因为当你的normal_exchange绑定多个队列,且是topic类型的交换器时,如果你的死信队列指定的死信交换器是该交换器,消息存在发送到多个队列的风险,会对别的系统造成重复消费。
2.max retry如何获取,rabbitmq有一个属性,就是当一个消息