网站首页 > 精选文章 / 正文
13.1 消息补偿机制介绍
RabbitMQ默认的补偿机制就是重试机制,当消费者程序报错时就会默认的去实现补偿机制,因为@RabbitListener底层使用的是AOP的异常通知进行拦截,自动实现补偿机制该消息会缓存到rabbitmq服务器端进行存放,一直重试到不报错。这样一直重试是有问题的,我们可以设置重试的间隔时间,当重试次数全部用完之后,消息就会被放弃掉。
13.2 YAML配置
spring:
rabbitmq:
host: 192.168.133.128
port: 5672
username: admin
password: admin
virtual-host: /
listener:
simple:
retry:
enabled: true # 开启消费者程序异常情况下会进行重试
max-attempts: 3 # 最大重试次数
initial-interval: 30000 # 重试间隔时间
server:
port: 8081
13.3 重试机制问题
13.3.1 超时异常
因为网络异常或者调用的第三方接口异常导致失败的是需要进行重试的。有时候因为网络延迟也会造成消息重复消费的问题。解决重复消费方案如下:
- 使用全局的MessageID判断消费方是同一个消息,在Message中塞入一个全局的标识符。
- 使用业务逻辑ID比如订单号
13.3.2 程序异常
因为程序异常导致失败的是不需要进行重试的,这个时候我们应该将异常日志进行记录并使用定时任务进行消息的补偿,实在不行那就进行人工的补偿。
Tags:rabbitmq配置
猜你喜欢
- 2024-12-28 用rabbitmq实现消息重发的功能 rabbitmq查看消息内容
- 2024-12-28 秃头大牛一文竟然就把SpringCloudStream(SCS)给讲明白了?
- 2024-12-28 详细介绍一下RabbitMQ的消息持久化机制?
- 2024-12-28 SpringBoot整合RabbitMQ实现消息的发送和接收操作?
- 2024-12-28 RabbitMQ持久化机制、内存磁盘控制
- 2024-12-28 在Spring Boot中如何基于RabbitMQ实现流量削峰?
- 2024-12-28 Spring Boot中如何通过RabbitMQ接收秒杀流量
- 2024-12-28 「MQ中间件」 RabbitMQ死信队列及内存监控
- 2024-12-28 RabbitMQ 巧解消息积压难题 rabbitmq消息堆积处理
- 2024-12-28 rabbitmq 4种集群模式 rabbitmq集群