RabbitMq入门(消息持久化autoDelete、消息确认ACK机制)

目录

消息持久化处理

    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文件中配置一个尝试次数,尝试几次失败后就不再尝试了,将消息删除。


 
 
  1. #开启重试
  2. spring:
  3. rabbitmq:
  4. listener:
  5. retry
  6. enabled: true
  7. #重试次数,默认为3次
  8. spring:
  9. rabbitmq:
  10. listener:
  11. retry
  12. max-attempts: 5

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值