废话少说,我们快速开始!!!
什么是消息丢失?
通俗点讲就是消费从生产者生成到消费者消费这个过程中,消息没有真正的被消费者处理。它可能在传递过程中丢失了,消费者根本没有接收到;或者是消费者在处理消息时出现异常了,消息没有被真正的处理完毕,这都属于消息丢失的范畴。
RabbitMQ 消息丢失的三种情况
- 生产端消息丢失
原因:消息在发送到MQ的过程中,由于网络等原因导致消息没有发送到MQ,或者MQ没有收到消息。
解决方案:
1.1 开启RabbitMQ事务机制,生产者发送数据之前开启 RabbitMQ 事务channel.txSelect,然后发送消 息,如果消息没有成功被 RabbitMQ 接收到,那么生产者会收到异常报错,此时就可以回滚事务channel.txRollback,然后重试发送消息;如果收到了消息,那么可以提交事务channel.txCommit,类似我们数据库数据库事务机制。
1.2 开启RabbitMQ有confirm模式,生产者实例可以在发送消息前可以开启confirm模式,打开confirm模式后,每个被投递到这个channel的消息都会分配一个唯一ID标识,当消息写入RabbitMQ之后,RabbitMQ会回传一个ack消息给生产者,ack消息包含消息的唯一ID标识,这样生产者就能知道消息被准确收到;如果RabbitMQ因为自身内部错误导致消息丢失,就会回传一个nack消息给生产者,这样就会调用一个我们处理nack消息的回调函数,在这个回调函数中我们可以写一些消息重发逻辑。
网络异常导致消息没有发送出去可以进行重试处理,如果已经到MQ,因MQ自身原因导致消息无法正常消费,可以根据NACK回调进行重试处理
`try {
producer.send(message);
} catch (NetworkException e) {
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
大数据获取)**
[外链图片转存中…(img-EvelXNFl-1712543937799)]