前言:我们在消息生产端的可靠性投递方案中的方案一,producer就是通过消息confirm机制来确保消息能能投递到MQ(或者说是exchange)如果失败话做重投。

confirm机制:message 从 producer 成功投递到 rabbitmq broker cluster 则会返回一个 confirmCallback

tips:confirm机制只保证消息达到exchange,不保证消息到达queue

三种confirm方式:

  • 普通confirm模式:每发送一条消息后,调用waitForConfirms()方法,等待服务器端confirm。实际上是一种串行confirm了。
  • 批量confirm模式:每发送一批消息后,调用waitForConfirms()方法,等待服务器端confirm。
  • 异步confirm模式:提供一个回调方法,服务端confirm了一条或者多条消息后Client端会回调这个方法。
实现异步监听的消息的confirm:
  1. 在channel上开启确认模式:channel.confirmSelect()
  2. 在channel上添加监听:addConfirmListener,监听成功和失败的返回结果(实际业务中就可以根据结果对详细进行重发、记录日志等)

测试代码:

不需要消费者,直接在生产端声明队列,交换机做测试就好

package com.vivo.demo1.confirm;import com.rabbitmq.client.*;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author:luzaichun* @Date:2020/12/20* @Time:22:39**/
public class Producer {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.3.7");factory.setPort(5672);factory.setVirtualHost("/");Connection connection = factory.newConnection();Channel channel = connection.createChannel();//开启确认模式channel.confirmSelect();channel.exchangeDeclare("confirm_exchange","topic",false,false,null);channel.queueDeclare("confirm_queue",false,false,false,null);channel.queueBind("confirm_queue","confirm_exchange","topic.#");channel.basicPublish("confirm_exchange","topic.confirm",null,"测试消息确认机制".getBytes());channel.addConfirmListener(new ConfirmListener() {//只要是[交换机]确认收到了消息就会回调ConfirmListener的handleAck方法。(即使交换机没有正确路由到队列中)@Overridepublic void handleAck(long deliveryTag, boolean multiple) throws IOException {System.out.println("ack...消息投递成功");}//只要是[交换机]没有确认收到了消息就会回调ConfirmListener的handleNack方法。@Overridepublic void handleNack(long deliveryTag, boolean multiple) throws IOException {System.out.println("nack。。。消息投递失败,例如队列满了");}});}}

启动生产者可以看到控制台,回调成功。然后我们观察控制台发现消息已经到达confirm_queue队列,消息投递成功。

消息confirm机制相关推荐

  1. RabbitMQ之消息确认机制(事务+Confirm)

    概述 在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之后,消息到底有没有正确到达brok ...

  2. springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

    最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI.不过,话说回来这的确是件好事,与其开那些没味的扯皮会,多做技术交流还是很有助于个人 ...

  3. java确认rabbitmq_RabbitMQ 消息确认机制

    生产端 Confirm 消息确认机制 消息的确认,是指生产者投递消息后,如果 Broker 收到消息,则会给我们生产者一个应答.生产者进行接收应答,用来确定这条消息是否正常的发送到 Broker ,这 ...

  4. RabbitMQ消息确认机制

    文章目录 1. 事务机制 2. Confirm模式 2.1 生产者 2.1.1 普通Confirm模式 2.1.2 批量Confirm模式 2.1.3 异步Confirm模式 2.2 消费者 3. 其 ...

  5. RabbitMQ消息确认机制和消息重发机制

    一.机制 首先我们要知道一条消息的传递过程. 生产者 -> 交换机 ->  队列 我们的生产者生产消息,生产完成的消息发送到交换机,由交换机去把这个消息转发到对应的队列上.这其中我们可能在 ...

  6. RabbitMQ消息确认机制-可靠抵达

    消息发送到被消费的流程: JAVA的生产端的发送数据----->Broker(消息服务器)-------->达到Exchange交换机------------->通过路由键到达Que ...

  7. RabbitMQ学习笔记(四)-消息确认机制

    引入 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景.RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式. confirm 确认模式 return ...

  8. RabbitMQ实战 - Confirm机制

    1 什么是Confirm机制 消息的确认 Pro投递消息后,若Broker收到消息,则会给Pro一个应答 Pro接收应答 用来确定该消息是否正常地发送到Broker,这种方式也是消息可靠性投递的核心保 ...

  9. RabbitMQ之订阅模式与主题模式,消息确认机制

    1.订阅模式 作用类似与微信公众号,你订阅了就可以接收到消息 解读: 1.一个生产者,多个消费者. 2.每一个消费者 都有自己的队列 3.生产者没有直搂把洧息发送到队列而是发到了交换机 转发器exch ...

最新文章

  1. spring 源码 找不到 taskprovider_Spring 源码阅读环境的搭建
  2. 与 Linux 一起学习:学习地理
  3. PHP函数之日期时间函数date()使用详解
  4. Python入门100题 | 第054题
  5. Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)...
  6. 07年末围炉盛宴 - 信息工作者应用与管理系列Webcast
  7. delete kubectl pod_使用kubectl管理k8s集群(三十)
  8. JavaScript 大小转化B KB MB GB等的转化
  9. geotools读取shp数据的数据类型
  10. Apollo.Photonics.FOGS.BG.v3.2(以Bragg光栅原理为基础建立的一款光纤设备模拟及优化软件)
  11. mirth connect 去空格
  12. word文字上下间距怎么调_Word表格调整(行高、文字上下间距等)
  13. win7系统提示0x80072F8F错误代码的解决方法(刷新你的认知)
  14. 正整数m的百位数字python_求正整数m的百位数字
  15. 上传声音 微信小程序_微信小程序录音文件保存,播放
  16. 看的见的算法系列——插入排序
  17. 根据图片快速设置IDEA启动的Banner效果
  18. ext 6.0开发实例二
  19. MySQL DELETE 操作后没有释放磁盘空间
  20. 菜鸟弱弱地问:找个薪资待遇差的工作能成长吗?

热门文章

  1. Excel数据分析-漏斗图
  2. 征集安徽省生态环境保护先进技术成果项目认定申报企业
  3. HappyGBS GB28181信令服务 - 文档
  4. python数码时钟代码_用python写一个程序,以电子时钟格式打印时间,每隔一秒刷新一次...
  5. Nono从一开始数数,他每数一个数时会计算这个数中1的个数(如211中有两个1)并对1的个数进行累和,当1的个数之和不小于x时,Nono就要起床了。特别需要注意的是,当Nono数数达到10000时,N
  6. php函数从数组中取出指定的数目,php截取数组的指定长度
  7. 好多人都想用Python来蹭网,其实何必呢
  8. 微软nni_GitHub项目推荐 | NNI:微软发布的开源神经架构搜索or超参调优AutoML工具包...
  9. Buildroot OpenJDK 编译配置
  10. [转载]儿童画教学-理论篇