环境:springboot2.3.9 + RocketMQ4.8.0
RocketMQ机构及概念
RocketMQ服务
- 1 下载RocketMQ
- 2 配置环境变量
- 3 启动Name Server
- 4 启动 Broker
- 5 通过命令行发送 & 接收消息
设置环境变量:
C:\Users\MSI-NB>set NAMESRV_ADDR=localhost:9876
发送消息:
C:\Users\MSI-NB>tools org.apache.rocketmq.example.quickstart.Producer
接收消息:
SpringBoot整合RocketMQ入门
依赖:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
配置文件:
rocketmq:
nameServer: localhost:9876
producer:
group: demo-mq
生产者:
@Service
public class ProducerService {
@Resource
private RocketMQTemplate rocketMQTemplate ;
public void send(String message) {
rocketMQTemplate.convertAndSend("test-topic", message);
}
}
消费者:
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "consumer01-group")
@Component
public class ConsumerListener implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
System.out.println("接收到消息:" + message) ;
}
}
这里的topic要和发送端设置的一致,consumerGroup可随意。
发送接口:
@RestController
@RequestMapping("/messages")
public class MessageController {
@Resource
private ProducerService ps ;
@GetMapping("")
public Object send(String message) {
ps.send(message) ;
return "send success" ;
}
}
测试:
发送消息指定tags
发送时:
rocketMQTemplate.convertAndSend("test-topic:tag1", message);
接收时:
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "consumer01-group", selectorExpression = "tag1")
selectorExpression:默认是 “*” ,这里指定与发送的一致;
这里看下源码:
RocketMQUtil.java
这里topic与tags是用冒号 ":" 分割的,tags就是取的数组的第二个。
给个关注+转发呗