目录

基本概念

代码与实例


基本概念

异步模式:Channel对象提供的ConfirmListener()回调方法只包含deliverTag(当前Channel发出的消息序列号),需要自己为每一个Channel维护一个cunconfirm的消息序列号集合,每个publish数据,集合中元素+1,回调一次handleAck方法,unconfirm集合删除相应的一条(multiple=false)或多条(multiple=true)记录。从程序效率上看,这个unconfirm集合最好采用有序集合SortedSet存储结构

代码与实例

程序运行截图如下:

源码如下:

package tx;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.ConfirmListener;
import com.rabbitmq.client.Connection;
import util.ConnectionUtils;import java.io.IOException;
import java.util.Collections;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.concurrent.TimeoutException;public class TxSend {private static final String QUEUE_NAME = "test_queue_confirm3";public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {Connection connection = ConnectionUtils.getConnect();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME, false, false, false, null);//生产者调用confirmSelect 将 channel 设置为 confirm 模式channel.confirmSelect();//未确认的标识final SortedSet<Long> confirmSet = Collections.synchronizedSortedSet(new TreeSet<Long>());channel.addConfirmListener(new ConfirmListener() {//ACKpublic void handleAck(long l, boolean b) throws IOException {if(b){System.out.println("> handleAck multiple!");    //多条confirmSet.headSet(l + 1).clear();}else{System.out.println("> handleAck multiple false!");  //单条confirmSet.remove(l);}}//Nack 回执有问题的public void handleNack(long l, boolean b) throws IOException {if(b){System.out.println("> handleNack multiple!");   //多条confirmSet.headSet(l + 1).clear();}else{System.out.println("> handleNack multiple false!"); //单条confirmSet.remove(l);}}});String msgStr = "Hello World!";while (true){long seqNo = channel.getNextPublishSeqNo();channel.basicPublish("", QUEUE_NAME, null, msgStr.getBytes());confirmSet.add(seqNo);}}
}

Java笔记-RabbitMQ中生产者端confirm模式(异步模式)相关推荐

  1. Java笔记-RabbitMQ中生产者端confirm模式

    目录 基本概念 代码与实例 基本概念 生产者将信号设置成confirm模式,一旦信道进入confirm模式,将有在该信道上面发布的消息都会被指派一个唯一的ID(从1开始),一旦消息被投递到所有匹配的队 ...

  2. Java笔记(学习中。。)

    Java笔记 eclipse的使用 常用的dos指令 预备知识 基本语法 变量 关于字符型 关于String 进制转换 运算符 流程控制 数组 数组的内存解析: 数组的Arrays工具类 面向对象 对 ...

  3. Java笔记-RabbitMQ的消息确认机制(事务)

    目录 基本概念 代码与实例 基本概念 消息应答与消息持久化,如下代码: boolean autoAck = false; channel.basicConsume(QUEUE_NAME, autoAc ...

  4. Spring Boot工作笔记-RabbitMQ中Unsupported major.minor version 52.0问题

    目录 错误演示 解决方法 错误演示 字符串如下: java.lang.UnsupportedClassVersionError: com/rabbitmq/client/ConnectionFacto ...

  5. Java笔记-Spring中RabbitMQ的调用

    目录 基本概念 代码与演示 基本概念 Spring中已经整合了RabbitMQ,通过配置bean文件,然后在源码中加载,可以简化代码操作. 身为C++程序员不得不说这种方式真的是太爽了. 在本人做过的 ...

  6. Java笔记-spring-rabbitmq中queue设置argument(添加x-message-ttl)

    最近在读Spring的官方文档,在此记录下自己做的小实验. 这里主要是在生产者中声明和添加: @BeanQueue queue(){Queue queue = new Queue(queueName, ...

  7. java 舍_Java中BigDecimal的8种舍入模式

    java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是小数点后的位 ...

  8. rabbitmq中的三种交换器(匹配模式)

    direct(直接交换模式) 消息中的路由键(routing key)如果和Binding中的binding key一致,交换器就将消息发到对应的队列中.它是完全匹配,单播的模式. fanout(广播 ...

  9. Java笔记-spring-rabbitmq中使用@RabbitListener消费(手动确认,获header数据)

    手动确认时: application.properties需要添加 spring.rabbitmq.listener.simple.acknowledge-mode=manual 确认ack chan ...

最新文章

  1. 多项式求和x+(x^2)/2!+(x^3)/3!+...
  2. CodeForces 501B——Misha and Changing Handles
  3. 4t硬盘实际容量是多少_SMR硬盘到底能用不?点进来看看避免踩雷
  4. ubuntu20.04自带python版本_替换 ubuntu 自带的python版本
  5. 你们公司还没使用HTTP3?赶紧来补一补,学习一下如何在Nginx上配置HTTP3。
  6. aPaaS将如何改变软件行业?
  7. day12 java的方法覆盖(重写)
  8. 基于Go语言实现高并发推荐系统架构设计
  9. beego模板语法循环html块,1.69 beego 模板语法指南 - Beego 中文文档
  10. gcc离线安装 ubuntu 不用编译_「ubuntu安装gcc」ubuntu18.04安装gcc详细步骤(附问题集) - seo实验室...
  11. Word如何自动多级编号
  12. vue alexa:_免费下载:在任何PC上使用Alexa免提
  13. 阿里云服务器如何选择操作系统?操作系统选择方法
  14. 基于AM5728核心板的户外工作站可靠性和便捷性设计
  15. msi(微星)UEFI模式 机械加固态双硬盘安装Ubuntu16
  16. win10蓝屏0xc000021a怎么修复?
  17. linux下脚本录制工具——script和scriptreplay
  18. HTML5期末大作业:关于我的家乡——四川文化(4页) HTML+CSS+JavaScript
  19. SCS【6】单细胞转录组之细胞类型自动注释 (SingleR)
  20. 排球制作html,3D教程-排球的制作

热门文章

  1. SCCM2012系列之二,SCCM2012部署前的Active Directory准备
  2. 出于一些原因的考虑,即日起,一步一步SharePoint 2007系列文章将暂停发布
  3. 通俗讲解【重定向】及其实践
  4. 程序员入职后千万不要沾沾自喜,不注意这一点,将来很可能后悔!
  5. 我们异口同声说的shooow
  6. 我更爱荷叶freeeim
  7. 不信不能雷倒你!超牛高考作文
  8. 苹果零售店每平方英尺能创造4000美元
  9. Python基本语法,python入门到精通
  10. 我的代码第一次运行时的样子