RabbitMQ补偿机制与@RabbitListener注解原理
补偿机制
RabbitMQ
默认情况下,如果消费者程序出现异常的情况下,会自动实现补偿(重试)机制
即队列服务器发送补偿请求
@RabbitListener原理
@RabbitListener
底层使用 AOP
进行拦截
- 如果程序没有抛出异常,则会自动提交事务
- 如果程序捕捉到异常信息,会自动实现补偿机制,该消息会缓存到
RabbitMQ服务端
中,一直重试到不跑出异常为止
补偿机制一直重复显然是会占用资源的,所以我们可以尝试修改补偿机制
当超过最大重试次数之后,消息队列默认就会放弃这条消息。
针对不同的情况也可以将消息发送到死信队列中,由专门的消费者进行处理,避免占用过多的资源
如何选择合理的补偿机制
情况一
1 |
|
需要
接口可能是由于网络延时导致接口无法访问,是属于正常现象
情况二
1 |
|
不需要
因为重试的原因是抛出了异常,再重试多次也无济于事,所以是消费者内部的原因,需要消费者内部修正
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!