# SpringBoot集成RocketMQ
**Repository Path**: xiaopengxiaopeng/spring-boot-integration-RocketMQ
## Basic Information
- **Project Name**: SpringBoot集成RocketMQ
- **Description**: Windows上单机部署RocketMQ,并进行SpringBoot集成RocketMQ的简单实践。
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-08-25
- **Last Updated**: 2023-10-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 简单实践
首先搭建单机开发环境。在Linux环境下部署RocketMQ教程较多,可直接参考快速开始 | [RocketMQ (apache.org)](https://rocketmq.apache.org/zh/docs/quickStart/01quickstart),我以在Windows环境下搭建RocketMQ为例。
本机环境:
RocketMQ运行JDK:1.8.0_261
IntelliJ IDEA 2020.2.4
SpringBoot项目运行JDK:11.4.06
SpringBoot版本:2.6.13
### 1.下载RocketMQ
从RockitMQ官网 http://rocketmq.apache.org/dowloading/releases/ 下载最新的release包。
Windows需安装JDK1.8以上。
安装后解压即可
### 2.最小应用启动
RocketMQ自身分为 **NameServer** 和 **Broker** 两个部分,用作本机开发实践学习的最小应用,应该分别启动一个NameServer和一个Broker节点。
#### 2.1 配置变量
配置ROCKETMQ_HOME的环境变量。需确保JAVA_HOME的环境变量已配置。
#### 2.2启动NameServer(mqnamesrv.cmd)
直接启动mqnamesrv.cmd将会不成功,需要修改配置文件。
查看mqnamesrv.cmd可知,实际上是运行runserver.cmd脚本,则需要修改该脚本部分配置。具体配置含义参见[JVM/OS配置 | RocketMQ (apache.org)](https://rocketmq.apache.org/zh/docs/bestPractice/04JVMOS)
考虑到个人用的电脑端性能问题,需先修改内存配置。
1. 编辑runserver.cmd,将`JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m`改为`JAVA_OPT=%JAVA_OPT% -server -Xms256m -Xmx512m`
2. 启动NameServer,可以直接双击mqnamesrv.cmd启动,也可以通过CMD进入到bin目录下通过`start mqnamesrv.cmd`来启动
#### 2.3启动Broker(mqbroker.cmd)
与mqnamesrv.cmd类似,需要修改配置文件,优化内存选择。由mqbroker.cmd也可知,实际上是启动runbroker.cmd,则可以修改该文件配置。
需将 `JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g -Xmn1g`改为`JAVA_OPT=%JAVA_OPT% -server -Xms256m -Xmx512m`。
启动方式可以直接启动,也可以通过CMD来启动。其中,还可以在启动前修改配置文件,来指定NameServer的地址。在SpringBoot中也有地址指定。这里就不作修改,直接启动。
#### 2.4运行结果截图

可以从截图中看到两个服务的运行地址。可以从配置文件中指定地址。
#### 2.5遇见的问题
如果JDK版本过高,出现服务无法启动的现象,具体是由配置文件中的`JAVA_OPT=%JAVA_OPT% -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC`中部分配置所导致的。部分配置已经在高版本的JDK移除或者修改,所以无法执行。在简单实践中建议使用JDK1.8或JDK11。
### 3.SpringBoot集成RocketMQ
1. 从IDEA中新建SpringBoot Maven项目;
2. 在pom.xml导入
```
org.apache.rocketmq
rocketmq-spring-boot-starter
2.1.1
```
3. 配置文件 application.properties
```
# NameServer地址,可以由自己指定,也可以从运行结果中查看到
rocketmq.name-server=0.0.0.0:9876
# 默认的消息组
rocketmq.producer.group=springBootGroup
```
4. 消息生产者类编写
5. 消息消费者类编写
6. 事务监听器类编写
7. Controller类编写
8. Result类编写
9. 简单实践中还集成了使用Swagger2构建RESTful APIs来查看接口,所以还需加上Swagger2的配置、相关类及注解。
10. 项目结构

红线部分是SpringBoot项目搭建时自动生成的包与类。
11. 项目启动与项目测试