MQ消息丢失问题

MQ消息丢失问题

  1. 如何保证消息的可靠性传输

  2. 可能原因:生产者丢了,mq自己丢了,消费者丢了

1.rabbitMq

  • 1、生产者丢数据:写消息的过程中,消息在网络传输的过程中丢失,没到mq
    • 解决方案:
      • ①.事务机制:同步阻塞,会降低吞吐量
channel.select();
try{
	//发送消息
}catch(Exception e){
	channel.txRollBack
	//重试
}
channel.txCommit
  • ②. confirm机制:基于回调,异步不阻塞。推荐使用,提升吞吐量
channel.confirm
//发送消息
//实现成功和失败的回调方法
//可以在失败的回调中重试
  • 2、 rabbitMq丢数据:接收到消息后先暂存在内存中,在持久化到磁盘之前rabbitMq挂掉导致丢失
    • 解决方案:设置持久化,第一创建queue的时候将其设置为持久化的,这样可以保证持久化queue的元数据,但是不会持久化queue里的数据;第二是将deliveryMode设置为2,即将消息设置为持久化。
    • 而且持久化可以跟生产者即confirm机制配合起来,只有消息被持久化到磁盘之后,才会通知生产者ack了。
  • 3、 消费者丢数据:打开了消费者autoAck机制,消费的时候还没处
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值