前两篇记录了RocketMq下载安装与启动、面板搭建与问题解决:
本篇记录用java项目访问消息队列,使用Springboot项目,创建一个项目rocket-demo,再创建两个module:producer、consumer,生产者发送一个简单的字符串,消费者接受并打印,一个很简单的例子。
为简单操作,两个module都以rocketmq-demo为父项目,依赖统一在rocketmq-demo的pom文件中引入。
一、引入依赖
在项目(rocketmq-demo)最外层pom中引入依赖:
- SpringBoot相关依赖及版本管理(根据自己习惯就好): spring-boot-starter、spring-boot-starter-web
- rockermq起步依赖
<!--rockermq-->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
- lombok
二、编写生产者代码
1、配置文件application.yml
spring:
application:
name: producer
server:
port: 5125
rocketmq:
name-server: localhost:9876
producer:
group: zrk-producer
其中name-server为自己安装的rocketmq的name server访问地址
2、编写代码
@RequestMapping("name")
@RestController
public class NameController {
@Resource
private RocketMQTemplate rocketMQTemplate;
@GetMapping("send")
public String sendName(String name) {
rocketMQTemplate.convertAndSend("send-name", name);
return "发送成功:" + name;
}
}
注:(1)直接引入RocketMQTemplate进行访问 (2)"send-name"为topic名称
三、编写消费者代码
1、配置文件application.yml
spring:
application:
name: consumer
server:
port: 5124
rocketmq:
name-server: localhost:9876
其中name-server为自己安装的rocketmq的name server访问地址
2、编写代码
@Slf4j
@Service
@RocketMQMessageListener(consumerGroup = "zrk-consumer", topic = "send-name")
public class NameListener implements RocketMQListener<String> {
@Override
public void onMessage(String s) {
log.info("收到名称:{}", s);
}
}
注:(1)consumerGroup必须设置,否则报错 (2) topic必须与生产者保持一致
四、访问调试
1、启动并访问生产者接口
postman访问:
2、查看RocketMq面板
打开面板->消息->选择topic:send-name->点击搜索:
点击MESSAGE DETAIL
3、启动消费者
看到打印出日志
再看消息队列信息详情:
可以看到状态为已被消费