RabbitMQ——消息应答和持久化
1、消息应答
1.1、概念
概念
消息应答机制是指消费者在消费消息后向 RabbitMQ 确认(acknowledge)已经成功处理了消息。
这个机制有助于确保消息在被消费者处理后被正确地从队列中移除,从而防止消息的丢失。
两种消息应答机制
1、自动应答(Auto Acknowledgment): 在自动应答模式下,一旦消息被消费者接收,RabbitMQ 会立即将消息标记为已被消费,而不需要消费者明确地向 RabbitMQ 发送确认。
这种模式下,消息被认为已经成功处理,即使消费者在处理消息的过程中发生错误,消息也会从队列中删除。
开启自动应答: 在消费者订阅队列时,设置 autoAck 参数为 true。
channel.basicConsume(queueName, true, consumer);
优点:简单,不需要手动确认。
适用场景:对消息的处理时机和可靠性要求不高,可以容忍一定程度的消息丢失。
2、手动应答(Manual Acknowledgment): 在手动应答模式下,消费者在处理完消息之后,需要向 RabbitMQ 发送明确的确认信号,告诉 RabbitMQ 可以安全地删除这条消息了。
这种模式下,消费者需要手动调用确认方法。
-
关闭自动应答: 在消费者订阅队列时,设置
autoAck参数为false。channel.basicConsume(queueName, false, consumer); -
手动确认消息: 在消费者处理完消息后,手动向 RabbitMQ 发送确认信号。
channel.basicAck(deliveryTag, false);
优点:
1、更精细的控制消息的处理时机和可靠性,确保消息在成功处理后才被确认。
2、可以批量应答,并且减少网络拥堵
适用场景:对消息的可靠性传递有较高要求,需要在消息处理成功后才确认消息,以避免消息丢失。
1.2、手动应答示例
生产者:
package com.weipch.rabbitmq.three;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;
import com.weipch.rabbitmq.utils.RabbitMqUtils;
import java.nio.charset.StandardCharsets;

最低0.47元/天 解锁文章
329

被折叠的 条评论
为什么被折叠?



