当前位置: 首页 > news >正文

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:localhostport:5672username:guestpassword:guest

配置虚拟线程执行器

@BeanpublicExecutorrabbitVirtualExecutor(){returnneworg.springframework.core.task.VirtualThreadTaskExecutor("rabbit-virtual-");}@BeanpublicSimpleRabbitListenerContainerFactoryrabbitListenerContainerFactory(ConnectionFactoryconnectionFactory,ExecutorrabbitVirtualExecutor){SimpleRabbitListenerContainerFactoryfactory=newSimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setTaskExecutor(rabbitVirtualExecutor);factory.setConcurrentConsumers(5);factory.setMaxConcurrentConsumers(20);returnfactory;}

生产者 + 消费者

@SpringBootApplicationpublicclassRabbitApp{publicstaticvoidmain(String[]args){SpringApplication.run(RabbitApp.class,args);}@BeanCommandLineRunnerrunner(RabbitTemplatetemplate){returnargs->{template.convertAndSend("test-queue","Hello RabbitMQ");};}@RabbitListener(queuesToDeclare=@Queue("test-queue"),containerFactory="rabbitListenerContainerFactory")publicvoidconsume(Stringmsg){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

生产者

@AutowiredprivateRocketMQTemplaterocketMQTemplate;@BeanCommandLineRunnerrocketRunner(){returnargs->{rocketMQTemplate.convertAndSend("test-topic","Hello RocketMQ");};}

消费者

@RocketMQMessageListener(topic="test-topic",consumerGroup="test-consumer-group")@ComponentpublicclassRocketConsumerimplementsRocketMQListener<String>{@OverridepublicvoidonMessage(Stringmessage){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-groupauto-offset-reset:earliest

Kafka Listener 容器工厂

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

生产者 + 消费者

@AutowiredprivateKafkaTemplate<String,String>kafkaTemplate;@BeanCommandLineRunnerkafkaRunner(){returnargs->kafkaTemplate.send("test-topic","Hello Kafka");}@KafkaListener(topics="test-topic",containerFactory="kafkaListenerContainerFactory")publicvoidlisten(Stringmessage){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 均可稳定集成
  • 选型关键在业务模型,而非“谁吞吐更高”

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

http://www.jsqmd.com/news/499639/

相关文章:

  • 复制一个链接,1分钟提取视频全文——视频转文字我用了半年
  • Ollama本地模型接入OpenClaw教程
  • AI 算力大考:缺电只是表象,制造才是真正的天花板
  • JAVA后端——依据离散点/格点生成GEOJSON以渲染色斑图
  • 01 spring ai alibaba(SAA1.1.2)基础聊天实现-ChatModel
  • 计算机毕设 java 米果智能食堂管理系统分析与设计 Java+SpringBoot 智能食堂点餐管理平台 Web 版校园食堂线上订餐系统
  • 非支配排序多目标黏菌优化算法(NSSMA) —— Matlab实现 测试函数包括ZDT、DTL...
  • 高通实习面经
  • AI职业末日图爆火,6000万白领岗危了
  • 深入 Java 垃圾回收调优:从底层原理到落地实战,攻克性能瓶颈
  • 软件综合项目-mqtt
  • ChatGPT和Gemini怎么导出成长图
  • 速看!!安全员ABC证靠谱的查询方式有哪几种?分别是怎么查询呢?
  • 关于密码破解的方式
  • Qt导航栏组件A05:多文档编辑器的「打开文件列表」侧栏
  • 计算机毕设 java 门诊管理系统 Java+SpringBoot 门诊医疗管理平台 Web 版医院门诊诊疗管理系统
  • 基于能量分配的光伏混合储能系统仿真模型 ①光伏:采用mppt控制实现最大功率跟踪 ②蓄电池与超...
  • Vue3 按钮切换示例(启动 / 关闭互斥显示)
  • 动态规划_最长递增子序列_C++
  • 计算机毕设 java 课程教学平台设计与实现 Java+SpringBoot 课程教学管理平台 Web 版在线课程学习管理系统
  • STL:string
  • AI智能水库图像识别数据集 水面漂浮物识别 水面分割识别 河道护栏分割数据集 YOLO格式数据集第10573期
  • 泰思特电子分享_EMC测试电流探头选型差异性及影响因素探讨
  • SPI子系统源码剖析--(2)Spi_Master驱动框架
  • TSMC 28nm工艺库,可仿真-文档齐全
  • Android Studio 安装教程(Windows 超详细图文版)
  • 洛谷:P5744 【深基7.习9】培训
  • 计算机毕设 java 口腔牙科诊所管理系统 Java+SpringBoot 口腔牙科诊疗管理平台 Web 版牙科门诊就医管理系统
  • 16、【Agent】【OpenCode】源码构建(Bun介绍)
  • python-web自动化-selenium(1)