当前位置: 首页 > news >正文

消息队列RabbitMQ-使用过程中面临的问题与解决思路

消息队列在使用过程中会出现很多问题

首先就是消息的可靠性,也就是消息从发送到消费者接收,消息在这中间过程中可能会丢失

生产者到交换机的过程、交换机到队列的过程、消息队列中、消费者接收消息的过程中,这些过程中消息都可能会丢失。

这对上述过程,RabbitMQ分别对应的解决方案是生产者确认机制、持久化机制、消费者确认机制、消费者失败重试机制。

生产者确认机制,就是保证消息在生产者到交换机的过程、交换机到队列的过程不会丢失的机制。这种机制给每一个消息指定了唯一的ID,消息从生产者到交换机、从交换机到队列中的阶段都会返回一个结果,消息从生产者到交换机会通过返回一个布尔值来反馈消息是否送到了交换机,即发送者确认publisher-confirm。如果消息投递到了交换机但是没有到队列,就会返回ACK及路由失败原因,即发送者回执publisher-return。

持久化机制,就是保证消息在消息队列中不会丢失的机制。比如消息发送到RabbitMQ中,突然发生宕机,将会导致消息丢失。消息持久化机制包括:交换机持久化、队列持久化、消息持久化。默认情况下由SpringAMQP声明的交换机和队列都是持久化的。可以在RabbitMQ控制台上看到叫交换机和队列的features字段上标示D。利用SpringAMQP发送消息时,可以设置消息的属性MessageProperties,指定为delivery-mode。

消费者消息确认机制,在此机制下RabitMQ会根据消费者的回执来确认消费者是否成功处理消息,然后在确定是否删除消息。SpringAMQP确认模式默认是auto,由spring检测listenner代码是否出现异常,没异常返回ack,有异常返回nack。当然还有manual手动ack模式,和none无ack模式。unacked会在控制台queues中的messas中显示,并回复到Ready状态,不会被RabbitMQ删除、并且会重新投递。但是消息不断的重入队(发送消息、出现异常、在重入队),出现了死循环,这是就要依靠消费者失败重试机制了。

消费者失败重试机制主要实现靠两方面

1.将重入队利用Spring的retry机制改为本地重试,可以通过修改消费者服务模块的application.ym文件。

spring:
  rabbitmq:
    listener:
      simple:
        retry:
          enabled: true # 开启消费者失败重试
          initial-interval: 1000 # 初始的失败等待时长为1000毫秒=1秒
          multiplier: 2 # 每次重试尝试时间间隔增加因子
          max-attempts: 3 # 最大重试次数,达到最大重试次数后,消息默认会被丢弃
          stateless: true # true无状态;false有状态。如果业务中包含事务,这里改为false

上述配置完成,触发本地重试,在重试3次后,SpringAMQP会抛出异常AmqpRejectAndDontRequeueException,并且控制台上消息被删除了,意味着SpringAMQP返回的是ack,mq删除消息了。

2.指定消息重试失败的失败策略,默认的是直接丢弃消息,也可以设置将其失败后重新入队(不建议,没意义),推荐的是将失败的消息投递到指定的队列,这个队列专门存放异常消息,后续方便人工处理。

相关文章:

  • OpenCV-36 多边形逼近与凸包
  • 【网络安全】什么样的人适合学?该怎么学?
  • NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!
  • c#的反汇编对抗
  • 推荐彩虹知识付费商城免授权7.0源码
  • 第99讲:MHA高可用集群配置实战:邮件告警和Binlog服务器搭建详解
  • NineAi 新版AI系统网站源码 ChatGPT
  • 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十二章 常用工具函数 (Utils配置)
  • C语言:生成校验码
  • javaSE和javaEE区别
  • HTML 字符实体参考清单
  • Java使用Redis实现消息队列
  • 【算法】约瑟夫环问题解析与实现
  • 【正点原子STM32连载】 第五十二章 串口IAP实验 摘自【正点原子】APM32E103最小系统板使用指南
  • Lag-Llama:第一个时间序列预测的开源基础模型介绍和性能测试
  • PTA | Wifi密码
  • 5G网络eMBB、uRLLC、mMTC
  • “分布式透明化”在杭州银行核心系统上线之思考
  • 前端判断对象为空
  • 掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验
  • 辽宁辽阳市白塔区一饭店发生火灾,当地已启动应急响应机制
  • 中吉乌铁路重点控制性工程开工建设,包括三座隧道
  • 神十九飞船已撤离空间站,计划于今日中午返回东风着陆场
  • IMF前副总裁朱民捐赠1000万元,在复旦设立青云学子基金
  • 上汽集团一季度净利润30.2亿元,同比增长11.4%
  • 中方发布《不跪!》视频传递何种信息?外交部回应