如何使RabbitMQ消息稳定可靠传输,避免消息丢失呢?

乔欣 rabbitmq 发布时间:2022-11-15 23:31:28 阅读数:4111 1
下文笔者讲述讲述MQ的消息丢失概念及保证消息可靠传输的方法分享,如下所示

消息丢失的原因分享

MQ消息丢失的原因分析: 
   MQ消息丢失可分为以下几类:
       生产者丢失消息
       消息列表丢失消息
       消费者丢失消息

生产者丢失消息

消息的制造者,生成消息给MQ时,出现丢失
此时我们只需使用RabbitMQ提供的transaction和confirm模式
 即可确保生产者不丢消息
例:
transaction机制:
     发送消息前,开启事务(channel.txSelect())
	    然后发送消息
    如果发送过程中出现什么异常,事务就会回滚(channel.txRollback())
	如果发送成功则提交事务(channel.txCommit())
注意事项:
    这种方式会使系统吞吐量下降;

confirm模式(此方法目前市面上使用的比较多):
     当channel进入confirm模式,所有在该信道上发布的消息都将会被指派一个唯一的ID(从1开始)
	    一旦消息被投递到所有匹配的队列之后,rabbitMQ就会发送一个ACK给生产者(包含消息的唯一ID)
		  这就使得生产者知道消息已经正确到达目的队列了
      如果rabbitMQ没能处理该消息,则会发送一个Nack消息给你,生产者可以进行重试操作

消息队列丢数据

MQ服务异常,使消息丢失
我们通常采用磁盘持久化的方式来避免,
  MQ队列丢失消息

消费者丢失消息

消费者丢失消息:
   由于消费者使用自动确认消息模式
  如:
   消费者在收到消息之后,处理消息之前,会自动回复RabbitMQ已收到消息 
   处理消息失败之,再去MQ也无法拿到消息,这就是消费者丢失消息
我们只需将消息确认修改手动,并放在处理消息之后
即可解决“消费者丢失”消息,这个场景
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/rabbitmq/2022/4927.html

最近发表

热门文章

好文推荐

Java265.com

http://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者