RabbitMQ中的消息确认ACK机制

深藏阁楼爱情的钟 2023-10-05 18:08 84阅读 0赞

我们将消息持久化后,假如消费端出现异常,rabbitmq服务器会将消息缓存到内存,当生产者发送一直发送消息而消费者都没有正常消费时消息就会将这些消息全部保存在内存,当我们的消息过多时,就可能导致rabbitmq服务器内存泄漏,

解决办法:1.开启ack确认机制,2.消费端设置重试机制(默认是三次)

开启之后生产者客户端没有收到消息ack反馈就会认为该消息没有被消费,就会保存到内存,但是设置重试机制后,消费端消费了设置的重试次数之后,假如还没有收到ack反馈,就会将缓存在内存中的消息移除,这样就可以防止内存溢出

消费端具体配置代码:

  1. spring.application.name=springcloud-mq
  2. spring.rabbitmq.host=192.168.70.131
  3. spring.rabbitmq.port=5672
  4. spring.rabbitmq.username=oldlu
  5. spring.rabbitmq.password=123456
  6. #设置交换器的名称
  7. mq.config.exchange=log.direct
  8. #info队列名称
  9. mq.config.queue.info=log.info
  10. #info路由键
  11. mq.config.queue.info.routing.key=log.info.routing.key
  12. #error队列名称
  13. mq.config.queue.error=log.error
  14. #error路由键
  15. mq.config.queue.error.routing.key=log.error.routing.key
  16. #开启重试
  17. spring.rabbitmq.listener.retry.enabled=true
  18. #重试次数,默认为3次
  19. spring.rabbitmq.listener.retry.max-attempts=5

来源:https://blog.csdn.net/liyu121/article/details/99492479

发表评论

表情:
评论列表 (有 0 条评论,84人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RabbitMQ消息确认ACK机制

    1、什么是消息确认ACK。   答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失。为了确保数据不