ACK消息确认机制
ACK机制是消费者从RabbitMQ收到消息并处理完成后,反馈给RabbitMQ,RabbitMQ收到反馈后才将次消息从队列中删除。
1. 如果一个消费者在处理消息出现了网络不稳定、服务器异常等现象,那么就不会有ACK反馈,RabbitMQ会认为这个消息没有正常消费,会将消息重新放入队列中。
2. 如果在集群的情况下:RabbitMQ会立刻将这个消息推送给这个在线的其他消费者。这种机制保证了在消费者服务端故障的时候,不丢失任何消息和任务。
3. 消息永远不会从RabbitMQ中删除:只有当消费者正确返送ACK反馈,RabbitMQ确认收到后,消息才会从RabbitMQ服务的数据中删除。
4. 消息的ACK确认机制默认是打开的。
解决方式
方式一:可以在消费消息中try-catch
由于在消费消息时可能抛出运行时异常,这种解决方式难于处理和控制。
方式二:在Consumer的配置文件中配置重试机制
配置开启重试及重试次数,在RabbitMQ没有收到ACK确认时,重新放入队列,重试指定次数后不再放入队列。