Message acknowledgment(消息应答)

执行一个任务可能需要花费几秒钟,你可能会担心如果一个消费者在执行任务过程中挂掉了。一旦RabbitMQ将消息分发给了消费者,就会从内存中删除。在这种情况下,如果正在执行任务的消费者宕机,会丢失正在处理的消息和分发给这个消费者但尚未处理的消息。

但是,我们不想丢失任何任务,如果有一个消费者挂掉了,那么我们应该将分发给它的任务交付给另一个消费者去处理。

为了确保消息不会丢失,RabbitMQ支持消息应答。消费者发送一个消息应答,告诉RabbitMQ这个消息已经接收并且处理完毕了。RabbitMQ就可以删除它了。

如果一个消费者挂掉却没有发送应答,RabbitMQ会理解为这个消息没有处理完全,然后交给另一个消费者去重新处理。这样,你就可以确认即使消费者偶尔挂掉也不会丢失任何消息了。

没有任何消息超时限制;只有当消费者挂掉时,RabbitMQ才会重新投递。即使处理一条消息会花费很长的时间。

消息应答是默认打开的。我们通过显示的设置autoAsk=true关闭这种机制。现即自动应答开,一旦我们完成任务,消费者会自动发送应答。通知RabbitMQ消息已被处理,可以从内存删除。如果消费者因宕机或链接失败等原因没有发送ACK(不同于ActiveMQ,在RabbitMQ里,消息没有过期的概念),则RabbitMQ会将消息重新发送给其他监听在队列的下一个消费者。

代码示例:

生产者端代码不变,消费者端代码这部分就是用于开启手动应答模式的。

[java] view plaincopy
  1. // 监听队列,手动返回完成
  2. channel.basicConsume(QUEUE_NAME, false, consumer);

注:第二个参数值为false代表关闭RabbitMQ的自动应答机制,改为手动应答。

在处理完消息时,返回应答状态。

[java] view plaincopy
  1. // 返回确认状态
  2. channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
在处理完消息时,返回应答状态。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a491857321/article/details/50670238

RabbitMQ消息应答------ack机制相关推荐

  1. 【RabbitMQ】消息应答--ack机制

    目录 消息应答 概念 自动应答 消息应答的方法 Multiple 的解释 手动应答实现 1.准备工具类 2.生产者 3.两个睡眠时间不同的消费者 4.效果展示 消息自动重新入队 效果演示: 消息应答 ...

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

    参考:https://blog.csdn.net/pan_junbiao/article/details/112956537 ack 机制就是消息在 生产者在发布消息以后,消息存在内存中,如果消息被确 ...

  3. 4-5:TCP协议之确认应答(ACK)机制和超时重传机制

    文章目录 一:TCP的确认应答(ACK)机制 二:超时重传机制 一:TCP的确认应答(ACK)机制 在TCP中,当发送端的数据达到接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做ACK( ...

  4. RabbitMQ的消息确认ACK机制

    1.什么是消息确认ACK. 答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失.为了确保数据不会丢失,RabbitMQ支持消 ...

  5. RabbitMQ:消费者ACK机制、生产者消息确认

    文章目录 基础案例环境搭建: 环境: 1. 生产者发送消息确认 1.1 confirm 确认模式 1.2 return 退回模式 源代码 1.1.3 小结 2. 消费者签收消息(ACK) 2.1 代码 ...

  6. [RabbitMQ]消息应答概念_消息手动应答代码

    消息应答 概念 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况.RabbitMQ 一旦向消费者传递了一条消息,便立即将该消 息标记为 ...

  7. RabbitMQ消息应答

    消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况.RabbitMQ一旦向消费者传递了一条消息,便立即将该消息标记为删除.在这种情况下, ...

  8. RabbitMQ消息应答实战(针对自动|手动应答常见问题进行模拟)

    消息应答概念 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况.RabbitMQ 一旦向消费者传递了一条消息,便立即将该消息标记为删除 ...

  9. RabbitMQ中的消息确认ACK机制

    我们将消息持久化后,假如消费端出现异常,rabbitmq服务器会将消息缓存到内存,当生产者发送一直发送消息而消费者都没有正常消费时消息就会将这些消息全部保存在内存,当我们的消息过多时,就可能导致rab ...

最新文章

  1. 快速启动程序的工具软件都比不了Win+R-转
  2. mysql i o 高_经典案例:磁盘I/O巨高排查全过程
  3. PLSQL_性能优化系列20_Oracle Result Cash结果缓存
  4. Mybatis使用statementType=STATEMENT实现动态传入表名或字段名
  5. 从 0 搭建一个工业级推荐系统
  6. 北京大学计算机科学李丰,中文智能问答系统作业解析-北京大学计算机科学技术研究所.PDF...
  7. 【leetcode困难】968. 监控二叉树
  8. 野生前端的数据结构基础练习(5)——散列
  9. 关于开学,我的心路历程~我已不想开学了
  10. 34. login-shell 和 环境变量
  11. grunt入门讲解4:如何创建task(任务)
  12. Python和Ruby语言对比
  13. 在udp聊天器里如何给飞秋发消息
  14. 腾讯地图获取经纬度 Java计算距离工具类
  15. Java基础知识(知识点)
  16. matlab随机抽样模拟,随机抽样一致性算法(matlab)
  17. opencv 切取红色
  18. c++自学笔记第五次
  19. 微信小程序图片显示模式
  20. 拉勾课程--性能优化记录

热门文章

  1. 使用时间超级长的充电宝是啥样的?
  2. 皮一皮:可怜的西瓜...
  3. mdpi的手机_【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi
  4. php打印pre,php 打印格式化显示利器 pre
  5. 使用浏览器console批量更改图片的宽度
  6. vs release 调试 路径设置
  7. 作为事件属性设置而输入的表达式“打开”产生如下错误:在Microsoft Office Access 与 OLE服务器或ActiveX控件通讯时出现问题。
  8. A-Softmax的总结及与L-Softmax的对比——SphereFace
  9. Python监控目录和文件变化
  10. sws_scale sws_getContext