RabbitMQ补偿机制与@RabbitListener注解原理

补偿机制

RabbitMQ 默认情况下,如果消费者程序出现异常的情况下,会自动实现补偿(重试)机制

即队列服务器发送补偿请求

@RabbitListener原理

@RabbitListener底层使用 AOP 进行拦截

  • 如果程序没有抛出异常,则会自动提交事务
  • 如果程序捕捉到异常信息,会自动实现补偿机制,该消息会缓存到 RabbitMQ服务端中,一直重试到不跑出异常为止

补偿机制一直重复显然是会占用资源的,所以我们可以尝试修改补偿机制


当超过最大重试次数之后,消息队列默认就会**放弃这条消息

针对不同的情况也可以将消息发送到**死信队列中,由专门的消费者进行处理,避免占用过多的资源

如何选择合理的补偿机制

情况一

消费者获取到消息后,调用第三方接口,但接口暂时无法访问,是否需要重试?

需要,接口可能是由于网络延时导致接口无法访问,是属于正常现象

情况二

消费者获取到消息后,抛出数据转换异常,是否需要重试?

不需要,因为重试的原因是抛出了异常,再重试多次也无济于事,所以是消费者内部的原因,需要消费者内部修正


RabbitMQ补偿机制与@RabbitListener注解原理
https://huajframe.github.io/2021/04/09/消息中间件/RabbitMQ/RabbitMQ补偿机制与-RabbitListener注解原理/
作者
HuaJFrame
发布于
2021年4月9日
许可协议