RabbitMQ消息应答------ack机制
来源:互联网 发布:vr反畸变算法 编辑:程序博客网 时间:2024/05/23 00:03
Message acknowledgment(消息应答)
执行一个任务可能需要花费几秒钟,你可能会担心如果一个消费者在执行任务过程中挂掉了。一旦RabbitMQ将消息分发给了消费者,就会从内存中删除。在这种情况下,如果正在执行任务的消费者宕机,会丢失正在处理的消息和分发给这个消费者但尚未处理的消息。
但是,我们不想丢失任何任务,如果有一个消费者挂掉了,那么我们应该将分发给它的任务交付给另一个消费者去处理。
为了确保消息不会丢失,RabbitMQ支持消息应答。消费者发送一个消息应答,告诉RabbitMQ这个消息已经接收并且处理完毕了。RabbitMQ就可以删除它了。
如果一个消费者挂掉却没有发送应答,RabbitMQ会理解为这个消息没有处理完全,然后交给另一个消费者去重新处理。这样,你就可以确认即使消费者偶尔挂掉也不会丢失任何消息了。
没有任何消息超时限制;只有当消费者挂掉时,RabbitMQ才会重新投递。即使处理一条消息会花费很长的时间。
消息应答是默认打开的。我们通过显示的设置autoAsk=true关闭这种机制。现即自动应答开,一旦我们完成任务,消费者会自动发送应答。通知RabbitMQ消息已被处理,可以从内存删除。如果消费者因宕机或链接失败等原因没有发送ACK(不同于ActiveMQ,在RabbitMQ里,消息没有过期的概念),则RabbitMQ会将消息重新发送给其他监听在队列的下一个消费者。
代码示例:
生产者端代码不变,消费者端代码这部分就是用于开启手动应答模式的。
// 监听队列,手动返回完成channel.basicConsume(QUEUE_NAME, false, consumer);
注:第二个参数值为false代表关闭RabbitMQ的自动应答机制,改为手动应答。
在处理完消息时,返回应答状态。
// 返回确认状态channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
在处理完消息时,返回应答状态。
1 0
- RabbitMQ消息应答------ack机制
- (六) RabbitMQ消息应答------ack机制
- RabbitMQ消息队列:ACK机制
- RabbitMQ消息队列:ACK机制
- rabbitMq消费者角度:消息分发、消息应答(ACK)、公平分发
- (六)RabbitMQ消息队列-消息任务分发与消息ACK确认机制(PHP版)
- rabbitMQ消息应答和持久化
- RabbitMQ入门教程(十二):消息确认Ack
- RabbitMQ(三)—消息应答与消息持久化
- RabbitMQ消息确认机制
- rabbitmq 消息确认机制
- 消息应答机制重复发送JMS(八)
- RabbitMQ的架构、交换机机制和ACK机制
- ack是什么,如何使用Ack机制,如何关闭Ack机制,基本实现,STORM的消息容错机制,Ack机制
- RabbitMQ的应答模式
- 轻松搞定RabbitMQ(三)——消息应答与消息持久化
- ActiveMQ消息传送机制以及ACK机制详解
- ActiveMQ消息传送机制以及ACK机制详解
- Android资源文件详解
- Dubbo粗浅记录
- javascript-页面跳转-(咋个办呢-zgbn)
- 160cracked-1
- 概率论与数理统计(随机变量及概率分布)
- RabbitMQ消息应答------ack机制
- Sipdroid源码初探(一):用户注册(RegisterAgent)
- poj 1190(剪枝)
- 电脑绣花制版-仿版的过程与注意事项
- Codeforces Round #342 (Div. 2)-A. Guest From the Past
- 知识树
- 延迟渲染(Deferred Shading)
- 构造方法私有化
- 威尔克姆教程:他他米的偏移系数及分割线