参考:https://blog.csdn.net/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机制(消息确认机制)和消息补偿机制相关推荐

  1. 消息队列mysql redis那个好_Redis作为消息队列与RabbitMQ的比较

    Redis作为消息队列与RabbitMQ的比较 RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩 ...

  2. msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列

    Linux进程间的通信方式 ----消息队列. 消息队列和共享内存类似 消息队列它允许一个或多个进程向它写消息,一个或多个进程向它写读消息. 消息队列存在于系统内核中,消息的数量受系统限制. 我们来看 ...

  3. 手把手教姐姐写消息队列(golang)- 使用channel实现消息队列

    前言 这周姐姐入职了新公司,老板想探探他的底,看了一眼他的简历,呦呵,精通kafka,这小姑娘有两下子,既然这样,那你写一个消息队列吧.因为要用go语言写,这可给姐姐愁坏了.赶紧来求助我,我这么坚贞不 ...

  4. redis延迟消息队列不准时php,Redis实现延迟消息队列

    消息队列是应用中常用的一个技术点,通常我们可以借助消息队列中间件来实现,但是并不是所有的情况下,都需要使用到MQ. 如果只需要实现简单的消息队列,那么借助Redis即可. 如果对消息有着严格的可靠性等 ...

  5. RTX5 | 消息队列05 - 获取剩余空间,清空消息队列,删除消息队列

    文章目录 一.前言 二.实验目的 三.API 3.1.osMessageQueueGetSpace 3.2.osMessageQueueReset 3.3.osMessageQueueDelete 四 ...

  6. java消息队列mq_我爱java系列---【消息队列(rabbitmq)】

    使用消息队列来避免分布式事务 如果仔细观察生活的话,生活的很多场景已经给了我们提示. 比如在北京很有名的姚记炒肝点了炒肝并付了钱后,他们并不会直接把你点的炒肝给你,往往是给你一张小票,然后让你拿着小票 ...

  7. 消息队列面试连环问:如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?...

    大家好,我是 yes. 最近我一直扎在消息队列实现细节之中无法自拔,已经写了 3 篇Kafka源码分析,还剩很多没肝完.之前还存着RocketMQ源码分析还没整理.今儿暂时先跳出来盘一盘大方向上的消息 ...

  8. 消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?大量消息持续积压几个小时,怎么办?...

    消息积压处理办法1:临时紧急扩容 先修复consumer的问题,确保其恢复消费速度,然后将现有consumer都停掉.新建一个topic,partition是原来的10倍,临时建立好原先10倍的que ...

  9. 消息队列(2):常见的消息队列协议

    协议很常见,只要是通信,就会用到协议,就像我们说话的语言一样,不同的语言连通着不同的人群. 所以说,消息队列也是一样,想要互相通信,就要使用同一种协议. 每个协议下的消息队列,都有着不同的角色定义. ...

最新文章

  1. TensorRT Analysis Report分析报告
  2. python threading模块多线程源码示例(一)
  3. vs2008格式化代码
  4. 在Mac OS X中配置Apache + PHP + MySQL
  5. vue.js安装问题
  6. 洛谷P1337 [JSOI2004]平衡点 / 吊打XXX(模拟退火)
  7. 【Python】Python字典的高级用法-统计计数
  8. jboss配置ejb容器_JBoss AS 7 EJB3池配置
  9. Python之turtle画小狗、狮子头和小黄人
  10. 地震时,它可以救你一命!
  11. VS连接SQL ,Windows登录SQL 语句
  12. <<道 德 经>>------老子
  13. word文档怎么转换成jpg格式图片
  14. matlab interp1 spline,中国大学MOOC: MATLAB/Octave函数interp1中有一个描述插值方法的参数,其中spline表示...
  15. 星星之火OIer:C++大纲
  16. 使用win7自带的备份还原、创建系统镜像
  17. 关机、睡眠和休眠有啥区别
  18. (转) 行人检测资源 综述文献
  19. 没有专业技能不要紧,通过快营通也能月入上千元
  20. mysql运行sql文件不成功,圆我大厂梦!

热门文章

  1. 如何使用Python编写简易木马程序
  2. Unity中的四种基本光源
  3. 如何让笔记本变成wifi热点
  4. 答案_连连看游戏设计
  5. P3628 [APIO2010]特别行动队
  6. 显示 256 色的位图
  7. detectron2训练自己的数据集和转coco格式
  8. MLT:Deep Meta Learning for Real-Time Target-Aware Visual Tracking
  9. python数据分析在北京基本薪资_数据分析师薪酬如何?爬虫拉勾网告诉你
  10. 电子工程师怎么才能规范设计标准、提高设计效率?