我们都知道,消息从生产端到消费端消费要经过3个步骤:
-
生产端发送消息到RabbitMQ;
-
RabbitMQ发送消息到消费端;
-
消费端消费这条消息;
这3个步骤中的每一步都有可能导致消息丢失,消息丢失不可怕,可怕的是丢失了我们还不知道,所以要有一些措施来保证系统的可靠性。
这里的可靠并不是一定就100%不丢失了,磁盘损坏,机房爆炸等等都能导致数据丢失,当然这种都是极小概率发生,能做到99.999999%消息不丢失,就是可靠的了。下面来具体分析一下问题以及解决方案。
生产端可靠性投递
生产端可靠性投递,即生产端要确保将消息正确投递到RabbitMQ中。
生产端投递的消息丢失的原因有很多,比如消息在网络传输的过程中发生网络故障消息丢失,或者消息投递到RabbitMQ时RabbitMQ挂了,那消息也可能丢失,而我们根本不知道发生了什么。
针对以上情况,RabbitMQ本身提供了一些机制。
事务消息机制
事务消息机制由于会严重降低性能,所以一般不采用这种方法,我就不介绍了,而采用另一种轻量级的解决方案:confirm消息确认机制。
confirm消息确认机制
什么是confirm消息确认机制?顾名思义,就是生产端投递的消息一旦投递到RabbitMQ后,RabbitMQ就会发送一