2026终极版|Spring Boot 3.5.11 + JDK21 整合 RabbitMQ / RocketMQ / Kafka(对比 + 选型 + 可运行示例)

适配环境:JDK 21(LTS)、Spring Boot 3.5.11
适用人群:Java 后端开发、架构师、技术选型决策者
特点:基于 Spring Boot 3.5.x + JDK21 实战验证,代码可直接运行,避免常见版本与虚拟线程误用问题

一、技术背景

1️⃣ JDK21

JDK21 是当前长期支持版本(LTS),虚拟线程(Project Loom)正式 GA,大幅降低高并发场景下的线程资源占用成本。

2️⃣ Spring Boot 3.5.11

Spring Boot 3.5.11 为 3.5.x 稳定维护版本,基于 Spring Framework 6.x,全面支持 JDK17+,对 JDK21 运行稳定。

3️⃣ 三大主流 MQ

  • :contentReference[oaicite:0]{index=0}
  • :contentReference[oaicite:1]{index=1}
  • :contentReference[oaicite:2]{index=2}

三者在架构模型、事务能力、吞吐目标和生态定位上差异明显。


二、核心能力对比(基于 Spring Boot 3.5.11 + JDK21)

对比维度RabbitMQRocketMQKafka
实现语言ErlangJavaJava
Spring 集成spring-boot-starter-amqprocketmq-spring-boot-starterspring-kafka
架构模型Exchange-QueueNameServer + BrokerBroker + Topic + Partition
顺序消息单队列顺序支持全局/分区顺序分区内顺序
事务支持无原生分布式事务原生事务消息(半消息机制)支持 Producer 事务
延迟消息插件或 TTL原生支持需业务实现
典型定位业务解耦 / 中小系统金融级核心业务大数据 / 流处理
说明:吞吐量与延迟强依赖硬件、磁盘、刷盘策略、消息大小与网络环境,不给出固定数值。

三、场景选型建议

✅ 选择 RabbitMQ 的场景

适合:

  • 中小规模业务系统
  • 快速上线项目
  • IoT / MQTT 协议场景
  • 运维团队规模较小

特点:易上手、生态成熟、可视化控制台友好。


✅ 选择 RocketMQ 的场景

适合:

  • 电商订单
  • 金融支付
  • 库存扣减
  • 延迟关闭订单

特点:

  • 原生事务消息
  • 支持顺序消息
  • 延迟消息能力强
  • Java 生态集成自然

✅ 选择 Kafka 的场景

适合:

  • 日志采集
  • 用户行为分析
  • 实时数仓
  • 事件溯源
  • 高吞吐数据流

特点:

  • 分区模型天然支持扩展
  • 支持 Producer 事务
  • 流处理生态完善(Flink / Spark)

四、Spring Boot 3.5.11 + JDK21 实战整合


1️⃣ 整合 RabbitMQ

依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

application.yml

spring:threads:virtual:enabled:true# 开启虚拟线程支持rabbitmq:host: localhost port:5672username: guest password: guest 

配置虚拟线程执行器

@BeanpublicExecutorrabbitVirtualExecutor(){returnneworg.springframework.core.task.VirtualThreadTaskExecutor("rabbit-virtual-");}@BeanpublicSimpleRabbitListenerContainerFactoryrabbitListenerContainerFactory(ConnectionFactory connectionFactory,Executor rabbitVirtualExecutor){SimpleRabbitListenerContainerFactory factory =newSimpleRabbitListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setTaskExecutor(rabbitVirtualExecutor); factory.setConcurrentConsumers(5); factory.setMaxConcurrentConsumers(20);return factory;}

生产者 + 消费者

@SpringBootApplicationpublicclassRabbitApp{publicstaticvoidmain(String[] args){SpringApplication.run(RabbitApp.class, args);}@BeanCommandLineRunnerrunner(RabbitTemplate template){return args ->{ template.convertAndSend("test-queue","Hello RabbitMQ");};}@RabbitListener( queuesToDeclare =@Queue("test-queue"), containerFactory ="rabbitListenerContainerFactory")publicvoidconsume(String msg){System.out.println("收到: "+ msg);System.out.println("虚拟线程: "+Thread.currentThread().isVirtual());}}

2️⃣ 整合 RocketMQ

依赖

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.3.2</version></dependency>

application.yml

spring:threads:virtual:enabled:truerocketmq:name-server: localhost:9876producer:group: test-producer-group 

生产者

@AutowiredprivateRocketMQTemplate rocketMQTemplate;@BeanCommandLineRunnerrocketRunner(){return args ->{ rocketMQTemplate.convertAndSend("test-topic","Hello RocketMQ");};}

消费者

@RocketMQMessageListener( topic ="test-topic", consumerGroup ="test-consumer-group")@ComponentpublicclassRocketConsumerimplementsRocketMQListener<String>{@OverridepublicvoidonMessage(String message){System.out.println("收到: "+ message);System.out.println("虚拟线程: "+Thread.currentThread().isVirtual());}}
RocketMQ 的线程模型由客户端内部管理,如需定制线程池,应通过对应配置项或扩展方式调整。

3️⃣ 整合 Kafka

依赖

<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency>

application.yml

spring:threads:virtual:enabled:truekafka:bootstrap-servers: localhost:9092consumer:group-id: test-group auto-offset-reset: earliest 

Kafka Listener 容器工厂

@BeanpublicConcurrentKafkaListenerContainerFactory<String,String>kafkaListenerContainerFactory(ConsumerFactory<String,String> cf){ConcurrentKafkaListenerContainerFactory<String,String> factory =newConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(cf); factory.setConcurrency(5);return factory;}

生产者 + 消费者

@AutowiredprivateKafkaTemplate<String,String> kafkaTemplate;@BeanCommandLineRunnerkafkaRunner(){return args -> kafkaTemplate.send("test-topic","Hello Kafka");}@KafkaListener( topics ="test-topic", containerFactory ="kafkaListenerContainerFactory")publicvoidlisten(String message){System.out.println("收到: "+ message);System.out.println("虚拟线程: "+Thread.currentThread().isVirtual());}

五、生产级优化建议

RabbitMQ

  • 开启生产者确认机制
  • 合理设置 prefetch
  • 使用持久化队列 + 持久化消息
  • 监控积压与连接数

RocketMQ

  • 合理设置刷盘策略(SYNC_FLUSH / ASYNC_FLUSH)
  • 核心业务使用事务消息
  • Broker 主从部署

Kafka

  • 分区数量与副本因子合理规划
  • 使用事务保证 Exactly-Once
  • 启用批量消费提升吞吐

六、最终选型总结

场景推荐
快速开发 / 中小系统RabbitMQ
金融级核心交易RocketMQ
大数据 / 日志 / 流处理Kafka

七、结语

Spring Boot 3.5.11 + JDK21 技术栈下:

  • 虚拟线程降低并发成本
  • 三大 MQ 均可稳定集成
  • 选型关键在业务模型,而非“谁吞吐更高”

架构没有绝对优劣,只有是否适合你的系统。

Read more

LabVIEW 玩转数据库:Access 与 SQL Server 的实用之旅

LabVIEW 玩转数据库:Access 与 SQL Server 的实用之旅

labview操作access和sql server数据库很实用的例子,含有创建表格,读写数据,按时间段读取,读取表格名称,还有部分sql指令操作等提供数据库软件,提供远程安装等 在开发项目时,经常需要与数据库打交道,LabVIEW 作为一款功能强大的开发工具,提供了与 Access 和 SQL Server 数据库交互的便捷方式。今天就来分享几个超实用的例子。 一、LabVIEW 操作 Access 数据库 创建表格 Access 数据库小巧灵活,适合小型项目。首先我们得确保电脑安装了 Access 软件。如果没有,网上搜索官方渠道下载安装包即可安装。 在 LabVIEW 中创建 Access 表格,代码如下: // 首先创建数据库连接 Database Connectivity - Open Database.vi // 设置连接字符串,格式大概如下 "Provider=

By Ne0inhk
Spring Cloud 熔断降级详解:用 “保险丝“ 类比,Sentinel 实战教程

Spring Cloud 熔断降级详解:用 “保险丝“ 类比,Sentinel 实战教程

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 📋 目录 * 什么是熔断降级 * 定义 * 为什么需要熔断降级? * 保险丝类比:形象理解熔断机制 * 生活中的保险丝 * 熔断器工作原理对比 * 熔断器三种状态 * Sentinel 核心概念 * 什么是 Sentinel? * 核心概念对比 * Sentinel vs Hystrix 对比 * Sentinel 实战教程 * 环境准备 * 1. 添加依赖 * 2. 配置文件 * 基础示例:注解方式 * 3. 主启动类 * 4. 创建订单服务 * 5. 控制器 * 高级配置:规则定义 * 6. 流控规则配置 * OpenFeign 集成 * 7. Feign客户端集成Sentinel * 8. Feign降级处理 * 规则持久化(

By Ne0inhk
家政服务管理系统|基于springboot + vue家政服务管理系统(源码+数据库+文档)

家政服务管理系统|基于springboot + vue家政服务管理系统(源码+数据库+文档)

家政服务管理系统 目录 基于springboot + vue家政服务管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot + vue家政服务管理系统 一、前言 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,ZEEKLOG平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 二、系统功能演示 三、技术选型 系统设计原则 通常,大多数用户使用系统的目标主要是为了获取必要信息或享受系统提供的服务。因此,为了优化用户体验并增加系统的使用效率,在设计系统界面时,

By Ne0inhk

MySQL新手必看:什么是‘ROW SIZE TOO LARGE‘及简单修复

快速体验 1. 打开 InsCode(快马)平台 https://www.inscode.net 2. 输入框内输入如下内容: 创建一个交互式学习模块,向MySQL新手解释'ROW SIZE TOO LARGE'错误。包含:1) 动画演示行大小计算方式 2) 三个最常见原因的可视化示例 3) 逐步指导完成三种基础修复方法。最后提供一个小测验验证学习效果。 1. 点击'项目生成'按钮,等待项目生成完整后预览效果 今天在调试MySQL数据库时遇到了一个典型的错误提示:ROW SIZE TOO LARGE. THE MAXIMUM ROW SIZE FOR THE USED TABLE TYPE

By Ne0inhk