这里写自定义目录标题
一、安装
1、本体
-
前往官方网站下载最新版本
-
解压后配置环境变量
-
跳转至bin目录下,双击运行“mqnamesrv.cmd”来启动“nameserver”服务
-
在当前目录下使用命令启动“broker”服务,“autoCreateTopicEnable=true”使其可以自动注册主题,否则需要手动创建。如果没有自动创建,而且发送时没有对应的主题,则会报错无法发送信息
start mqbroker.cmd -n nameserver地址:9876 autoCreateTopicEnable=true
2、可视化控制台
- 前往gitHub下载控制台代码地址
- 解压缩后进入到“rocketmq-console”项目的配置文件路径下
rocketmq-externals\rocketmq-console\src\main\resources
- 修改配置文件,控制台端口号和“nameserver”的地址。其中“nameserver”地址可以不写,在启动控制台后再配置
- 跳转到“rocketmq-console”项目的根目录,执行“maven”的打包命里
mvn clean package -Dmaven.test.skip=true
- 跳转到根目录下的“target”目录,运行打包好的jar包
- 打开网页查看控制台
二、Springboot项目
1、普通消息
消息发送端
- 添加依赖,版本号可以到maven仓库中查找
- 添加配置
- 普通使用
消息接收端
- 添加依赖
- 编写配置
- 创建普通监听类
2、带有事务的消息
流程
发送端/服务端
- 使用“sendMessageInTransaction”方法发送消息
- 创建本地事务执行类
1)类需要实现“RocketMQLocalTransactionListener”接口,并重写两个方法。添加“@RocketMQTransactionListener”注解。
2)“RocketMQLocalTransactionState”有三个值,为COMMIT(发送)、ROLLBACK(回滚)、UNKONW(不清楚),当返回值为“COMMIT”时,消息才会发送给客户端
3)回调方法在对应流程中的第五步
接收端/客户端
和正常的一样,无任何变化
3、使用stream发送
1)默认模式发送(单通道)
发送端
- 添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
</dependency>
-
书写配置
-
添加注解:注解中的Class类为“Source”
-
编写发送代码
消费端
- 引入依赖,和发送端的相同
- 书写配置
- 添加注解:注解中的Class类为“Sink”
- 编写消费代码:消费类需要添加“@Component”和“@StreamListener”注解
“@StreamListener”的“value”值得含义为,“channel”通道名
2)自定义通道发送
发送端
- 引入依赖和默认相同
- 创建自定义通道,发送端的注解为“@Output”
- 编写配置
- 添加注解
- 编写发送代码,引用你的通道类,通过该通道发送消息
消费端
- 引入依赖,相同
- 创建消费端的通道类,消费端的注解为“@Input”
- 编写配置,多个消费端的通道的组名不能相同
- 添加注解
- 创建消费类
生产端和消费端的差别
- 生产端的组在配置文件中添加,消费端的组在类的注解中添加
- 如果发送带有事务的消息,生产端需要额外编写本地事务的处理代码,消费端不需要任何改变
stream发送
- 发送端的默认类为“Source”,消费端的默认类为“Sink”
- 发送端的固定搭配为
@Output(通道名)
MessageChannel output()
- 消费端的固定搭配为
@Input(通道名)
SubScribableChannel input()
- 如何分辨“input”和“output”,以服务为主体,向外发送消息时使用“output”,接收消息使用“input”
- 发送端配置中无需添加组名,消费端的组名一定要有