RabbitMQ总结(常见问题)
如何做到消息队列消息不丢失?
首先我们要了解消息传递的过程以及丢失的情况。
针对以上三种消息丢失的情况,都有对用的处理方案
1、针对消息传入过程丢失
开启confirm模式,在application.properties中做如下配置
spring.rabbitmq.host = 192.168.99.41
spring.rabbitmq.port = 5672
spring.rabbitmq.username = test
spring.rabbitmq.password = test
#开启confirm 确认机制
spring.rabbitmq.publisher-confirms=correlated
同时在生产者开启消息发送成功确认机制(后面补充)
2、MQ自身弄丢消息时的解决方法
持久化消息队列,发送消息时做到持久化到磁盘并设置queue、message持久化,即使rabbitmq服务器宕机,再次重启,会从磁盘恢复到queue,避免数据丢失
3、消费者自身弄丢消息的解决方式
关闭自动ACK,使用手动ACK。更改为手动ACK模式,每次处理完消息之后,再手动ACK一下。
spring.rabbitmq.host = 192.168.99.41
spring.rabbitmq.port = 5672
spring.rabbitmq.username = **
spring.rabbitmq.password = **
#手动ack模式
spring.rabbitmq.listener.simple.acknowledge-mode=manual
消费端手动ack(后面补充)