抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > rabbitmq消息队列 ack机制(消息确认机制)和消息补偿机制

rabbitmq消息队列 ack机制(消息确认机制)和消息补偿机制

时间:2023-08-27 19:34:23

相关推荐

参考:/pan_junbiao/article/details/112956537

ack 机制就是消息在 生产者在发布消息以后,消息存在内存中,如果消息被确认就会删除内存中消息。

在rabbitMq中 设置2种消息确认模式

1:自动确认 :RabbitMq种默认的确认模式 自动确认模式下,当 Broker (消息队列服务器实体)成功发送消息给消费者后就会立即把此消息从队列中删除,而不用 等待消费者回送确认消息。

2:手动确认。而在手动确认模式下,当 Broker (消息队列服务器实体) 发送消息给消费者后并不会立即把 此消息删除, 而是要等收到消费者回送的确认消息后才会删除,因此当消费者收到消息已经会发送一个ACK命令指消息确认给发送者,如果消费者因为意外崩溃而没有 发送 ACK 指令, 那么 Broker (消息队列服务器实体) 就会把该消息转发给其他消费者(如果此时没有其他消费者,则 Broker(消息队列服务器实体) 会缓存此消息, 直到有新的消费者注册)。

消息确认模式的实现实际上就是为了保险起见,在消息错误的时候做出一些处理。

消息确认可以在,提供了2个接口,一个在交换机回调,一个在发送到路由的时候回调

继承的接口 confirmCallBack ,returnCallBack 实现的方法 就是confirm和 returnMessage 2个方法

实现如图

/*** 生产者 发送到exchange后,回调* @param correlationData 消息相关的数据,一般用于获取 唯一标识 id* @param ack true 消息确认成功,false 失败* @param cause 确认失败的原因*/@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {log.info("---confirm---ack={}, cause={}", ack, cause);log.info("correlationData-->{}", correlationData.toString());if (ack) {log.info("confirm消息确认成功");} else {

/*** 生产者 找不到路由,触发* @param message 消息的相关信息* @param replyCode 错误状态码* @param replyText 错误状态码对应的文本信息* @param exchange 交换机的名字* @param routingKey 路由的key*/@Overridepublic void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {log.info("---returnedMessage---replyCode={}, replyText={}, exchange={}, routingKey={}", replyCode, replyText, exchange, routingKey);}

如果觉得《rabbitmq消息队列 ack机制(消息确认机制)和消息补偿机制》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。