项目实战之RabbitMQ重试机制进行消息补偿通知

🧑‍💻作者名称:DaenCode

🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。

😎人生感悟:尝尽人生百味,方知世间冷暖。



文章目录

🌟架构图


🌟application.properties

xml 复制代码
##----------rabbit配置--------------
spring.rabbitmq.host=49.233.48.98
spring.rabbitmq.port=5672
#需要手工创建虚拟主机
spring.rabbitmq.virtual-host=dev
spring.rabbitmq.username=admin
spring.rabbitmq.password=password
#消息确认方式,manual(手动ack) 和auto(自动ack); 消息消费重试到达指定次数进到异常交换机和异常队列,需要改为自动ack确认消息
spring.rabbitmq.listener.simple.acknowledge-mode=auto
#开启重试,消费者代码不能try catch捕获异常,要抛出异常
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=4
# 重试消息的时间间隔,5秒
spring.rabbitmq.listener.simple.retry.initial-interval=5000

🌟异常MQ配置

java 复制代码
@Configuration
@Slf4j
public class ErrorRabbitMQConfig {
    /**
     * 异常交换机
     */
    private String errorExchange="error.exchange";
    /**
     * 异常队列
     */
    private String errorQueue="error.queue";

    private String errorRoutingKey="error.routing.key";

    @Autowired
    private RabbitTemplate rabbitTemplate;
    /**
     * 创建异常交换机
     * @return
     */
    @Bean
    public TopicExchange errorTopicExchange(){
        return new TopicExchange(errorExchange,true,false);
    }

    /**
     * 创建异常队列
     * @return
     */
    @Bean
    public Queue errorQueue(){
        return new Queue(errorQueue,true);
    }

    /**
     * 建立绑定关系
     * @return
     */
    @Bean
    public Binding bindingErrorQueueAndExchange(){
        return BindingBuilder.bind(errorQueue()).to(errorExchange()).with(errorRoutingKey);
    }
    /**
    *消息重新发布到异常MQ
    */
    @Bean
    public MessageRecoverer messageRecoverer(){
        return new RepublishMessageRecoverer(rabbitTemplate,errorExchange,errorRoutingKey);
    }
}

🌟异常MQ消费者

java 复制代码
@Component
@Slf4j
@RabbitListener(queuesToDeclare = { @Queue("error.queue") })
public class ErrorMQListener {
    @RabbitHandler
    private void errorMessageHandler(EventMessage eventMessage, Message message, Channel channel) throws IOException {
        log.info("监听到消息:{}",message);
        //进行消息消费
        //发送邮箱通知、告警服务
    }
}

🌟注意

  1. 业务MQ消费者代码逻辑记得往外抛异常,进行try-catch了也要往外抛。
  2. 消息消费重试,达到重试次数进入到异常交换机、队列。消息确认方式需要改为自动ack。

🌟写在最后

有关于项目实战之RabbitMQ重试机制进行消息补偿通知到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


相关推荐
RainbowSea2 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq
RainbowSea2 小时前
5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
java·消息队列·rabbitmq
数据智能老司机3 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机4 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
数据智能老司机5 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
IT成长日记5 小时前
【Kafka基础】Kafka工作原理解析
分布式·kafka
州周6 小时前
kafka副本同步时HW和LEO
分布式·kafka
ChinaRainbowSea7 小时前
1. 初始 RabbitMQ 消息队列
java·中间件·rabbitmq·java-rabbitmq
爱的叹息8 小时前
主流数据库的存储引擎/存储机制的详细对比分析,涵盖关系型数据库、NoSQL数据库和分布式数据库
数据库·分布式·nosql
千层冷面9 小时前
RabbitMQ 发送者确认机制详解
分布式·rabbitmq·ruby