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

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

摘要:本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求,帮助开发者真正实现OpenClaw从“能用”到“放心用”的跨越。 优质专栏欢迎订阅! 【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】【YOLOv11工业级实战】 【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#工业上位机高级应用:高并发通信+性能优化】 【Java生产级避坑指南:

By Ne0inhk
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

ARM Linux 驱动开发篇--- Linux 并发与竞争实验(互斥体实现 LED 设备互斥访问)--- Ubuntu20.04互斥体实验

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》《嵌入式linux驱动开发》《linux系统移植专栏》 ❄专栏传送门: 《freertos专栏》《STM32 HAL库专栏》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言  一、实验基础说明 1.1、互斥体简介 1.2 本次实验设计思路 二、硬件原理分析(看过之前博客的可以忽略) 三、实验程序编写 3.1 互斥体 LED 驱动代码(mutex.c) 3.2.1、设备结构体定义(28-39

By Ne0inhk
Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

Flutter for OpenHarmony:swagger_dart_code_generator 接口代码自动化生成的救星(OpenAPI/Swagger) 深度解析与鸿蒙适配指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 前言 后端工程师扔给你一个 Swagger (OpenAPI) 文档地址,你会怎么做? 1. 对着文档,手写 Dart Model 类(容易写错字段类型)。 2. 手写 Retrofit/Dio 的 API 接口定义(容易拼错 URL)。 3. 当后端修改了字段名,你对着报错修半天。 这是重复劳动的地狱。 swagger_dart_code_generator 可以将 Swagger (JSON/YAML) 文件直接转换为高质量的 Dart 代码,包括: * Model 类:支持 json_serializable,带 fromJson/

By Ne0inhk
Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

Linux 开发别再卡壳!makefile/git/gdb 全流程实操 + 作业解析,新手看完直接用----《Hello Linux!》(5)

文章目录 * 前言 * make/makefile * 文件的三个时间 * Linux第一个小程序-进度条 * 回车和换行 * 缓冲区 * 程序的代码展示 * git指令 * 关于gitee * Linux调试器-gdb使用 * 作业部分 前言 做 Linux 开发时,你是不是也遇到过这些 “卡脖子” 时刻?写 makefile 时,明明语法没错却报错,最后发现是依赖方法行没加 Tab;想提交代码到 gitee,记不清 git add/commit/push 的 “三板斧”,还得反复搜教程;用 gdb 调试程序,输了命令没反应,才想起编译时没加-g生成 debug 版本;甚至连写个进度条,都搞不懂\r和\n的区别,导致进度条乱跳…… 其实这些问题,

By Ne0inhk