RabbitMq入门(消息持久化autoDelete、消息确认ACK机制)
目录
消息持久化处理
消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化。
autoDelete属性
@Queue: 当所有消费客户端连接断开后,是否自动删除队列 true:删除false:不删除
@Exchange:当所有绑定队列都不在使用时,是否自动删除交换器 true:删除false:不删除
当Queue中的 autoDelete 属性被设置为true时,那么,当消息接收着宕机,关闭后,消息队列则会删除,消息发送者一直发送消息,当消息接收者重新启动恢复正常后,会接收最新的消息,而宕机期间的消息则会丢失
当Quere中的 autoDelete 属性被设置为false时,那么,当消息接收者宕机,关闭后,消息队列不会删除,消息发送者一直发送消息,当消息接收者重新启动恢复正常后,会接收包括宕机期间的消息。
autoDelete设置是否为临时的,临时的当消息接收者关闭时,队列、交换器则会被删除。为true时,则不会被删除。
消息确认ACK机制
消息确认机制,就是说,确认消息正常执行了。当消息正常执行后,会返回一个ACK。没有正常执行则不会返回ACK
消息发送者向消息队列中发送一条消息,然后在消息接收者那里 手动的抛出一个异常 ,启动服务,由于消息接受者那里一直没有ACK反馈,那么消息就会一直返回到消息队列中,直到消息被正常执行消费。
RabbitMq控制台就会显示一条消息未被消费。
当发送很多消息的时候,第一条无法正常执行消费,那么,后面的所有消息都无法执行,会一直存在消息队列中,这样就会导致内存问题。这是一个很严重的问题
解决方式
第一种方式:
可以对这个异常进行处理,最简单的就是try catch一下。
第二种方式
可以在配置yml文件中配置一个尝试次数,尝试几次失败后就不再尝试了,将消息删除。
- #开启重试
- spring:
- rabbitmq:
- listener:
- retry:
- enabled:true
- #重试次数,默认为3次
- spring:
- rabbitmq:
- listener:
- retry:
- max-attempts: 5
- RabbitMQ 消息持久化、事务、Publisher的消息确认机制
- RabbitMQ入门教程(十二):消息确认Ack
- RabbitMQ3.7.2入门到进阶之工作队列消息应答ack与消息持久化durable
- (六)RabbitMQ消息队列-消息任务分发与消息ACK确认机制(PHP版)
- (六)RabbitMQ消息队列-消息任务分发与消息ACK确认机制(PHP版)
- RabbitMQ 消息持久化、事务、Publisher的消息确认机制
- RabbitMQ实现消息确认机制
- RabbitMQ 消息确认机制
- RabbitMQ消息队列(九):Publisher的消息确认机制
- SpringBoot 整合 RabbitMQ(包含三种消息确认机制以及消费端限流)
- 中间件系列十 RabbitMQ之消费者端的消息确认机制
- RabbitMQ消息队列(九):Publisher的消息确认机制
- RabbitMQ消息确认机制
- RabbitMQ - Publisher的消息确认机制
- spring rabbitmq 消息确认机制和事务支持
- RabbitMQ消息队列:ACK机制
- RabbitMQ (十二) 消息确认机制 - 发布者确认
- RabbitMQ(三)消息确认机制(事务+Confirm)
- Spring ActiveMQ 整合(三): 确认机制ACK(收到消息后,应该有一个回应也就是确认答复)
- RabbitMQ之消息确认机制(事务+Confirm)