RabbitMQ异步确认发布

您所在的位置:网站首页 rabbitmq批量确认 RabbitMQ异步确认发布

RabbitMQ异步确认发布

2023-04-12 22:11| 来源: 网络整理| 查看: 265

异步确认虽然编程逻辑比上两个复杂,但是性价比最高,无论是可靠性还是效率都没得说,它是利用回调函数来达到消息可靠性传递的,这个中间件也是通过函数回调来保证是否投递成功。

private static final int SEND_COUNT = 1000;//总共发送多少条信息 /* * 异步确认发布 * */ public static void publishMessageConfirmAsync() throws Exception{ //获取RabbitMQ连接 Channel rabbitMQConnectionChannel = RabbitMQUtil.getRabbitMQConnectionChannel(); //声明队列 String queueName = UUID.randomUUID().toString(); rabbitMQConnectionChannel.queueDeclare(queueName,false,false,false,null); //开启发布确认 rabbitMQConnectionChannel.confirmSelect(); //异步确认发布开始时间 long startTime = System.currentTimeMillis(); //消息确认成功回调函数 ConfirmCallback confirmCallback = (deliveryTag, multiple) ->{ System.out.println("确认的消息:" + deliveryTag); }; //消息确认失败回调函数 /* * 1.消息的标记 * 2.是否为批量确认 * */ ConfirmCallback nackCallback = (deliveryTag, multiple) ->{ System.out.println("未确认的消息:" + deliveryTag); }; //准备消息的监听器,监听哪些消息成功了,哪些消息未成功 /* *1.监听哪些消息成功了 *2.监听哪些消息未成功 * */ rabbitMQConnectionChannel.addConfirmListener(confirmCallback,nackCallback); //批量发消息 for (int i = 0; i < SEND_COUNT; i++) { String message = i + ""; //发送消息 rabbitMQConnectionChannel.basicPublish("",queueName,null,message.getBytes()); } //异步确认发布结束时间 long endTime = System.currentTimeMillis(); System.out.println("发送1000消息需要消耗:" + (endTime - startTime) +"ms"); //异步确认发布 publishMessageConfirmAsync();//发送1000消息需要消耗:44ms



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3