rabbitMQ如何避免消息的丢失?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yu15163158717/article/details/84675165

RabbitMQ中,消息丢失可以简单的分为两种:客户端丢失和服务端丢失。针对这两种消息丢失,RabbitMQ都给出了相应的解决方案。

生产者P向队列中生产消息,C1和C2消费队列中的消息,默认情况下,RabbitMQ会平均的分发消费给C1C2(Round-robin dispatching),假设一个任务的执行时间非常长,在执行过程中,客户端挂了(连接断开),那么,该客户端正在处理且未完成的消息,以及分配给它还没来得及执行的消息,都将丢失。因为默认情况下,RabbitMQ分发完消息后,就会从内存中把消息删除掉。

为了解决上述问题,RabbitMQ引入了消息确认机制,当消息处理完成后,给Server端发送一个确认消息,来告诉服务端可以删除该消息了,如果连接断开的时候,Server端没有收到消费者发出的确认信息,则会把消息转发给其他保持在线的消费者。

通过消息确认机制(Acknowlege)来实现,当消费者获取消息后,会想mq发送回执ACK,告知消息已经被接收。

猜你喜欢

转载自blog.csdn.net/yu15163158717/article/details/84675165