rabbitmq可能发生的消息丢失问题
2023-07-03 12:12:18 4 举报
rabbitmq可能发生的消息丢失问题
作者其他创作
大纲/内容
解决方案:关闭AutoACK,消费者消费消息,处理完成后,再发送ack给rabbitmq,如果没处理完,消费者宕机了,mq没有收到ack,mq会将这条消息重新分配给其他消费者去消费
2.rabbitmq接收到消息之后,先暂存在自己的内存里,结果消费者还没来得及消费,rabbirmq自己挂掉了,就导致暂存在内存里的数据就给搞丢了
rabbitmq
解决方案2:先把channel设置成confirm模式,发送消息,mq接受到了消息,会回调生产者本地的一个接口通知你消息成功收到,如果mq在接受消息的时候报错了,会回调用户的接口表示消息结束失败,用户可以在回调接口中,重新发送消息
解决方案:将消息持久化到磁盘,第一步是创建queue时将其设置为持久化,这样mq会持久化queue的元数据,但是不会持久化queue里的实际数据,第二步再发送消息的时候设置消息的deliveryMode设置为2,表示将这条消息持久化,必须同事设置这两个持久化才能保证消息的持久化
1.写消息的过程中,消息还没到rabbirmq在网络传输过程中就丢失了;或者是消息到了rabbitmq但是mq内部出错没有保存下来
生产者
事务机制是同步的,生产者发送消息会同步阻塞卡住等待你成功还是失败
AutoACK
3.消费者消费到了这个消息,但是还没来得及处理自己就挂掉了,但是rabbirmq以为这个消费者已经处理完了
confirm机制是异步的,生产者发送完消息就返回了,不会阻塞,可以发送下一个消息,吞吐量比事务的解决方案大很多
消费者
解决方案1:可以选择用rabbitmq提供的事务功能,就是生产者发送数据之前开始rabbitmq的事务(channel.txSelectfont color=\"#000000\
0 条评论
下一页