RabbitMQ之消费者批量消费

embedded/2024/9/24 16:26:45/

为什么要用消费端批量消费?
在一些业务场景下,我们希望使用 Consumer 批量消费消息,提高消费速度。可以通过对 SimpleRabbitListenerContainerFactory 进行配置实现批量消费能力

==========================>配置类
@Configuration
public class ConsumerConfiguration {@ResourceConnectionFactory connectionFactory;@ResourceSimpleRabbitListenerContainerFactoryConfigurer configurer;/*** 配置一个批量消费的 SimpleRabbitListenerContainerFactory*/@Bean(name = "consumer10BatchContainerFactory")public SimpleRabbitListenerContainerFactory consumer10BatchContainerFactory() {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();configurer.configure(factory, connectionFactory);// 这里是重点 配置消费者的监听器是批量消费消息的类型factory.setBatchListener(true);// 一批十个factory.setBatchSize(1000);// 等待时间 毫秒 , 这里其实是单个消息的等待时间 指的是单个消息的等待时间// 也就是说极端情况下,你会等待 BatchSize * ReceiveTimeout 的时间才会收到消息factory.setReceiveTimeout(10 * 1000L);factory.setConsumerBatchEnabled(true);return factory;}
}
====================》生产者
@Component
public class Producer10 {@ResourceRabbitTemplate rabbitTemplate;public void sendSingle(String id, String routingKey) {Message10 message = new Message10();message.setId(id);rabbitTemplate.convertAndSend(Message10.EXCHANGE, routingKey, message);}
}
================================》消费者
@RabbitListener(queues = Message10.QUEUE, containerFactory = "consumer10BatchContainerFactory")
@Component
@Slf4j
public class Consumer10 {/*** 批量消费** @param message 一批消息*/@RabbitHandlerpublic void onMessage(List<Message10> message) {log.info("[{}][Consumer10 批量][线程编号:{}][消息个数:{}][消息内容:{}]", LocalDateTime.now(), Thread.currentThread().getId(), message.size(), message);}/*** 单个消费** @param message 一个消息*/@RabbitHandlerpublic void onMessage(Message10 message) {log.info("[{}][Consumer10 单个][线程编号:{}][消息内容:{}]", LocalDateTime.now(), Thread.currentThread().getId(), message);}
}
==================================》测试类
@Testvoid sendSingle() throws InterruptedException {// 假设 一秒一个,发送 1000 个,观察消费者的情况for (int i = 0; i < 15; i++) {TimeUnit.SECONDS.sleep(1);String id = UUID.randomUUID().toString();producer10.sendSingle(id, Message10.ROUTING_KEY);if (i == 9) {log.info("[{}][test producer10 sendSingle] 发送成功10个", LocalDateTime.now());}}log.info("[{}][test producer10 sendSingle] 发送成功", LocalDateTime.now());TimeUnit.SECONDS.sleep(20);}
}

以上的是RabbitMQ之消费者批量消费实现的代码 若不了解rabbitmq的基本使用 建议先看看我前面对应的文章 文章链接:点我—>let’s go
若需完整代码 可识别二维码后 给您发代码。
在这里插入图片描述


http://www.ppmy.cn/embedded/32659.html

相关文章

VISO流程图之子流程的使用

子流程的作用 整个流程图的框图多而且大&#xff0c;进行分块&#xff1b;让流程图简洁对于重复使用的流程&#xff0c;可以归结为一个子流程图&#xff0c;方便使用&#xff0c;避免大量的重复性工作&#xff1b; 新建子流程 方法1&#xff1a; 随便布局 框选3 和4 &#…

深入理解 GMP:使用GNU多精度库进行高精度计算

目录标题 1. GMP库简介2. GMP库的核心功能3. 安装GMP库在Unix-like系统上&#xff1a;在macOS上&#xff1a;在Windows上&#xff1a; 4. GMP的优势和应用5. gmp-6.2.1特性和优化安装GMP 6.2.1使用GMP 6.2.1进行编程 6. 总结 高精度计算在科学研究、金融分析、加密算法以及任何…

python:set(集合)

set(集合) 去重处理&#xff0c;内容无序 列表使用&#xff1a;[] 元组使用&#xff1a;() 字符串使用&#xff1a;"" 集合使用&#xff1a;{} 基本语法; # 定义字面量集合&#xff1a;{元素&#xff0c;元素&#xff0c;元素&#xff0c;.......} 定义集合变…

hadoop学习---基于Hive的教育平台数据仓库分析案例(一)

案例背景&#xff1a; 大数据技术的应用可以从海量的用户行为数据中进行挖掘分析&#xff0c;根据分析结果优化平台的服务质量&#xff0c;最终满足用户的需求。教育大数据分析平台项目就是将大数据技术应用于教育培训领域&#xff0c;为企业经营提供数据支撑。 案例数据产生流…

飞书API(7):MySQL 入库通用版本

一、引入 在上一篇介绍了如何使用 pandas 处理飞书接口返回的数据&#xff0c;并将处理好的数据入库。最终的代码拓展性太差&#xff0c;本篇来探讨下如何使得上一篇的最终代码拓展性更好&#xff01;为什么上一篇的代码拓展性太差呢&#xff1f;我总结了几点&#xff1a; 列…

Linux上安装及卸载OpenJDK

Linux上安装Java Development Kit (JDK) 8的步骤如下&#xff1a; 1. 添加Java JDK 8的Yum源 首先&#xff0c;你需要添加Java JDK 8的Yum源到系统。这可以通过下载并安装Oracle JDK的方式完成&#xff0c;但由于Oracle JDK在某些情况下可能需要遵守特定的许可协议&#xff0c…

关于测试用例

目录 一 测试用例介绍 二 写用例的好处 三 不适合写用例的情况 一 测试用例介绍 测试用例由测试来写&#xff0c;编写时间在需求评审和设计评审&#xff08;如有&#xff09;结束后&#xff0c;需求提测前&#xff0c;用例依赖需求文档来编写。一般包含用例标题&#xff0c…

探索LLM在广告领域的应用——大语言模型的新商业模式和新个性化广告的潜力

概述 在网络搜索引擎的领域中&#xff0c;广告不仅仅是一个补充元素&#xff0c;而是构成了数字体验的核心部分。随着互联网经济的蓬勃发展&#xff0c;广告市场的规模已经达到了数万亿美元&#xff0c;并且还在持续扩张。广告的经济价值不断上升&#xff0c;它已经成为支撑大…