栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

rabbitmq之消息的异步确认

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

rabbitmq之消息的异步确认

ConcurrentSkipListMap 和 channel.getNextPublishSeqNo()

channel.getNextPublishSeqNo可以获取发布的消息的下一个序号,有序递增。ConcurrentSkipListMap有一个heapMap方法,可以返回key小于等于param的map子集。在发布消息之前先获取序号,作为key放到map里面。

map.put(nextPublishSeqNo, byteMsg);
channel.basicPublish("", queueName, null, msgStr.substring(i, i + 1).getBytes(StandardCharsets.UTF_8));

异步确认

Producer只管发消息,然后注册一个异步回调函数。rabbitmq提供了两个回调函数。一个是发送成功的回调,一个是发送失败的回调。两个函数的参数是一样的,两个。

  • sequence number 序号。表示成功/失败的消息编号
  • multiple 布尔值。false表示只有一个被确认。true表示小于等于当前序号的消息发送成功/失败
channel.confirmSelect();//启用消息确认
channel.addConfirmListener(
        (deliveryTag, multiple) -> {
            if (multiple) {
                System.out.println("序号" + deliveryTag + "的信息发送成功");
                map.remove(deliveryTag);
            } else {
                System.out.println("序号小于" + deliveryTag + "的信息发送成功");
                final ConcurrentNavigableMap confirmed = map.headMap(deliveryTag, true);
                confirmed.clear();
            }
        },
        (deliveryTag, multiple) -> {
            if (!multiple) {
                System.out.println("发送失败的信息sequence number:" + deliveryTag);
            } else {
                System.out.println("序号小于" + deliveryTag + "的消息发送失败");
            }
        });

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1040120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号