目录

ACK (consumer acknowledgemenet)

confirm (Publisher confirm)

事务(transaction)


使用MQ中间件时,保证消息准确发送和消费以及幂等性等问题是我们都需要考虑的。解决这些问题需要先来理解三个概念。

在RabbitMQ的确认有两种,其中一个consumer acknowledgement简称为ACK,另一个叫publisher confirm这里我们简称为confirm。

ACK (consumer acknowledgemenet)

基于AMQP协议,定义个消费者consumer到RabbitMQ broker的确认,表示一条消息已经被客户端正确处理。根据AMQP协议规定,consumer acknowledgemenet是通过basic.ack方法实现的,consumer在收到一条消息后,可以向broker发送basic.ack方法,确认一条消息已经收到。在默认的情况下,consumer acknowledgement模式是开启的,如果不想发送basic.ack,可以在发送basic.consume方法时指定no-ack参数,关闭consumer acknowledgement模式。

所以在开发中我们可以基于ACK的机制通过手动ACK的方式来实现消息的准确消费

confirm (Publisher confirm)

RabbitMQ扩展AMQP协议定义了从broker到生产者publisher的”确认”,将其称之为confirm。Publisher confirm并没有在AMQ协议的基础上添加新的确认方法,而是复用了basic.ack方法。需要注意的是publisher confirm模式并不是默认打开的,需要调用confirm.select方法将channel设置成confirm模式。当开启了confirm模式之后,只有当一条消息被broker接受之后,publisher才会收到这条消息的confirm,也就是一个basic.ack方法。

在开发中我们可以通过confirm方式实现消息发送的确认,在考虑性能的情况下可以使用这种方式代替事务方式保证消息发送成功。

事务(transaction)

RabbitMQ支持事务(transaction)。事务模式也不是默认开启的,需要调用tx.select方法开启事务模式。当开启了事务模式后,只有当一个事务被所有的broker接受之后,tx.commit-ok才会返回给客户端。
confirm模式和开启事务模式都可以保证消息被所有的broker接受,所以在发送消息场景中,使用事务或使用confirm都有可以达到消息准确发送的目的。

当然,开启confirm模式和开启事务模式还是有一些区别的。confirm是针对一条消息的,而事务是可以针对多条消息的(当然是针对同一个queue的多条消息)。
另外就是,confirm模式只是针对publisher的设置,而事务模式即可以针对publisher,也可以针对consumer。
如果针对publisher设置事务模式,则我们可以将多个basic.publish方法放在一个事务中,当所有的publish的消息被所有的broker接受后,publisher client会收到tx.commit-ok的方法。如果针对consumer设置事务模式,则我们可以将多个basic.ack方法放在一个事务中,收到tx.commit-ok时表示这些消息都被确认了。

RabbitMQ的confirm、ack、transaction三个概念的理解相关推荐

  1. Springboot——整合Rabbitmq之Confirm和Return详解

    文章目录 前言 为什么会有Confirm Springboot 整合 Mq 实现 Confirm 监听机制 依赖引入 增加配置文件,设定连接信息 配置队列.交换机,以及对其进行绑定 编写mq消息发送服 ...

  2. RabbitMQ的confirm机制

    目录 前言 一.confirm机制的选择 二.异步confirm设计. 第一个问题:我们要支持重试,所以我们必须想一个办法,在发送之前把消息save起来,当监听到ACK后,在把对应的消息remove掉 ...

  3. RabbitMQ消息应答------ack机制

    Message acknowledgment(消息应答) 执行一个任务可能需要花费几秒钟,你可能会担心如果一个消费者在执行任务过程中挂掉了.一旦RabbitMQ将消息分发给了消费者,就会从内存中删除. ...

  4. Springboot整合RabbitMQ,包含direct,topic,fanout三种模式的整合

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  5. RabbitMQ学习总结(一)——基础概念详细介绍

    2019独角兽企业重金招聘Python工程师标准>>> 一.基础概念详细介绍 1.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相 ...

  6. 区分 JVM 内存结构、 Java 内存模型 以及 Java 对象模型 三个概念

    本文由 简悦 SimpRead 转码, 原文地址 https://www.toutiao.com/i6732361325244056072/ 作者:Hollis 来源:公众号Hollis Java 作 ...

  7. 卷积神经网络训练的三个概念(Epoch,Batch,Iteration)

    总结下训练神经网络中最最基础的三个概念:Epoch(训练多少轮), Batch(每次输入网络样本的个数), Iteration(迭代次数). 1.名词解释 名词 定义 Epoch 使用训练集的全部数据 ...

  8. 关于三个概念:ActiveX、OLE和COM

    熟悉面向对象编程和网络编程的人一定对ActiveX.OLE和COM/DCOM这些概念不会陌生,但是它们之间究竟是什么样的关系,对许多们还是比较模糊的. 在具体介绍它们的关系之间,我们还是先明确组件(C ...

  9. 在进行了解JAVA CLASS文件解析时必须要明白的三个概念

    在讲Class文件的格式之前,要介绍三个概念: 1)数据类型:<JVM Spec>(2nded)中指出,Java Class文件的数据用自己定义的一个数据类型集来表示,即u1,u2,u4, ...

最新文章

  1. 全球最大规模学术不端调查显示,53%的博士生会从事有问题的研究
  2. linux命令上常用命令
  3. numpy.argsort详解
  4. 为部署ASP.NET Core准备:使用Hyper-V安装Ubuntu Server 16.10
  5. python章节总结_《Python深度学习》第一章总结
  6. 全局事务与本地事务的区别应用(从代码方面来探讨的)
  7. 【自定义排序规则】剑指 Offer 45. 把数组排成最小的数
  8. 免费的React课程,通过构建聊天应用程序来提高您的React JS技能
  9. 免费医学统计软件——医统无忧智能统计软件(两组间比较:两独立样本t检验、非参数检验和卡方检验)操作说明和结果解读
  10. cocos2d-x 全面总结--字体描边和制作阴影
  11. Mac外接4k显示器文字变小
  12. from scipy.misc import imread, imresize, imsave 报错的解决方法
  13. MUR560D-ASEMI快恢复二极管MUR560D
  14. Altium Designer多图纸原理图关联设计方法
  15. IJCAI 阿里论文 | 基于改进注意力循环控制门,品牌个性化排序升级系统来了
  16. 李永乐复习全书概率论与数理统计 第三章 多维随机变量及其分布
  17. python制作签名软件
  18. Centos7 新建server的优化脚本--不适用于所有人
  19. 采购服务器和终端的请示文件,设备采购申请报告模板
  20. 化学工程与装备杂志化学工程与装备杂志社化学工程与装备编辑部2022年第10期目录

热门文章

  1. numpy高级函数操作之——select、choose
  2. Winform 工具栏ToolStrip的使用
  3. 中国大学MOOC_浙大博弈论基础笔记4-5
  4. 彻底卸载Revit并重新安装
  5. Java怎样才是有天赋的_有天赋的人都是怎样的表现?
  6. Ubuntu中的输入法突然变成了繁体字解决办法及中英输入法切换
  7. Mybatis 关联查询(一对一与一对多)
  8. 学习51单片机外部总线扩展并口芯片8255
  9. 英伟达、万向、风语筑、追梦者基金……大咖漫谈“元宇宙与产业新机遇”丨2022元宇宙云峰会...
  10. 图书管理系统可行性分析报告