1.下载RocketMQ
如果我们要在本地环境使用RocketMQ,需要先下载RocketMQ的包(点击直接下载)。
2.安装RocketMQ
1)启动NameServer
我们解压完压缩包到项目的目录下:
$ cd rocketmq-all-5.1.4-bin-release/bin
macOS 和Linux命令:
### 启动NameServer
$ nohup sh mqnamesrv &
### 查看服务是否成功启动
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
Windows 用户则需要先配置环境变量:
然后执行命令:
$ mqnamesrv.cmd
The Name Server boot success...
2)启动Broker
macOS 和Linux命令:
### 启动 Broker
$ nohup sh bin/mqbroker -n localhost:9876 &
### 检查broker是否启动成功, 例如: Broker's IP is 192.168.1.2, Broker's name is broker-a
$ tail -f ~/logs/rocketmqlogs/broker.log
The broker[broker-a, 192.169.1.2:10911] boot success...
Windows启动命令:
$ mqbroker.cmd -n localhost:9876
The broker[broker-a, 192.169.1.2:10911] boot success...
这里暂时先介绍macOS 、Linux和Windows安装的方式,如果有需要用docker或Kubernetes的用户可以翻阅一下的下载包(点击直接下载)的RADME.md文档。
至此,我们的单点RocketMq的就已经搭载完毕。
2.SpringBoot搭建生产者和消费者
1)搭建服务
tips:这里我们会搭建两个服务来模拟实战项目中的生产者和消费者。
名字可以根据自己的喜好命令(这里只做简单的演示)。
2)导入依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.0</version> <!-- 请使用合适的版本 -->
</dependency>
其他依赖根据自己的需求加入即可。
3)配置文件
生产者配置文件:
# application.properties
rocketmq.name-server=127.0.0.1:9876
rocketmq.producer.group=producer-1
rocketmq.producer.send-message-timeout=50000
消费者配置文件:
# application.properties
rocketmq.name-server=127.0.0.1:9876
rocketmq.consumer.group=consumer-1
4)构建Broker主题
这里是重中之重!!不然你的服务是没法找到对应的通道的!!!
到我们解压后的bin目录后输入 Linux命令:
$ sh mqadmin updatetopic -n localhost:9876 -t TestTopic -c DefaultCluster
Windows命令:
mqadmin updatetopic -n localhost:9876 -t TestTopic -c DefaultCluster
tips: TestTopic 就是我们搭建的主题。
5)搭建生产者代码
在生产者服务加上:
package com.producer.demo.service;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyProducer {
@Autowired
private RocketMQTemplate rocketMQTemplate;
public void send(String topic, String message) {
rocketMQTemplate.convertAndSend(topic, message);
}
}
6)搭建消费者代码
在消费者服务里面加上:
package com.consumer.demo.service.impl;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;
@RocketMQMessageListener(topic = "TestTopic", consumerGroup = "consumer-1")
@Service
public class MyConsumer implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
// 在这里处理接收到的消息
System.out.println("Received: " + message);
}
}
7)测试代码
在生产者服务加上:
package com.producer.demo.service;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MyProducer {
@Autowired
private RocketMQTemplate rocketMQTemplate;
public void send(String topic, String message) {
rocketMQTemplate.convertAndSend(topic, message);
}
}
测试发送消息结果:
消费者接收结果:
至此,最基础的RocketMQ的消费者和生产者服务已经搭建完毕,后续会继续更新更高级的用法,欢迎大家在评论区提问和解答!