-
生产者消息丢失场景:
- -生产者消息丢失,写消息的过程中,消息没到rabbitmq在网络传输过程中就丢失;或者是消息到了rabbitmq,但是mq内部出错,目前没有保存消息.
-
生产者消息丢失解决方案:
- 1.通过事务机制
Connection conn = factory.newConnection(); Channel channel = conn.createChannel(); channel.txSelect; try{ //发送消息 }catch(Exception e){ channel.txRollback; //再次尝试发送该条消息 } channel.txCommit; channel.close(); conn.close(); //缺点,是同步操作,生产者发送消息会同步阻塞,等待成功失败,导致吞吐量下降
- 2.使用confirm模式(异步确认方式);1.把channel设置为confirm模式;2.发送消息;3.发送消息之后无需任何操作;4.rabbitmq接受到消息就回调本地的接口,通知信息收到;5.如果rabbitmq信息接受失败也会回调本地的一个接口,通知消息接收失败,此时你可以选择再次发送该条消息.
-
RabbitMQ消息丢失场景:
- -rabbitmq接受到消息,缓存到内存中,还没被消费,此时rabbitmq挂了,存到内存中的数据丢失.
-
RabbitMQ消息丢失解决方案:
- -第一步:设置创建queue设置为持久化(只会持久化queue元数据,但不会持久化queue中的数据);
- 第二部:发送消息时,设置deliveryMode设置为2(此时queue中的数据也将被持久化);
- 第三步:配合confirm机制使用,当消息被持久化后才通知生产者ack;
-
消费者丢失数据场景:
- -消费者接收到消息,但是还没操作,消费者自己挂了,但是rabbitmq以为该条消息已经被消费.
-
消费者丢失数据解决方案:
- -将autoAck关闭,在处理完消息后再手动提交ack;
RabbitMQ消息丢失
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1.简述RabbitMQ中的几种Exchange的作用。 答:有四种exchange 1)direct excha...
- (1)RabbitMQ的高可用性 RabbitMQ是比较有代表性的,因为是基于主从做高可用性的,我们就以他为例子讲...