ubuntu22.04 搭建RocketMQ
部署环境:
1. ubuntu22.04
2. 64bit JDK 1.8+
2. 64bit JDK 1.8+
一、 RocketMQ部署
1.1 下载
下载地址:https://rocketmq.apache.org/zh/download/
本文使用 4.9.8版本:

1.2 上传到指定目录下解压
unzip rocketmq-all-4.9.8-bin-release.zip
1.3 调整JVM参数
RocketMq默认的虚拟机内存较大,因而启动失败,需要编辑如下两个配置文件,修改jvm的内
//编辑runbroker.sh和runserver.sh修改默认的JVM大小
vim runbroker.sh
vim runserver.sh


1.3 启动RocketMQ
RocketMQ的启动主要涉及到Namesrv(命名服务)和Broker(消息存储和消费者服务)两部分,首先进入到bin路径下:
(1)启动Namesrv并设置输出日志位置:
nohup sh mqnamesrv > namesrv.log 2>&1 &
(2)启动Broker并设置输出日志位置
nohup sh mqbroker -n localhost:9876 > broker.log 2>&1 &
验证是否启动
jps
显示下面的内容说明启动成功了:

二、测试
(1)发送消息(生产者)
//设置环境变量
export NAMESRV_ADDR=localhost:9876
//使用安装包的demo发送消息,
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
成功示例:

(2) 接收消息(消费者)
//设置环境变量
export NAMESRV_ADDR=localhost:9876
//接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
成功示例:

(3) 关闭RocketMQ
//关闭namesrv
sh bin/mqshutdown namesrv
//关闭Broker
sh bin/mqshutdown broker
三、SpringBoot连接RocketMQ
3.1引入依赖
|
1
2
3
4
5
6
7
8
9
10
|
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>2.3.5.RELEASE</version></dependency><dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.5.2</version></dependency> |
3.2 添加配置 application.yml
|
1
2
3
4
5
6
7
8
9
|
rocketmq: nameServer: your-nameserver-ip # Name Server地址 producer: group: "test_producer_group"# 生产者组名 topic: "test_topic"#订阅主题 consumer: group: "test_consumer_group"# 消费者组名 topic: "test_topic"#订阅主题 subscription: "*" |
3.3 创建生产者
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
importorg.apache.rocketmq.client.producer.DefaultMQProducer;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;@ComponentpublicclassRocketMQProducer { @Value("${rocketmq.nameServer}") privateString nameServer; @Value("${rocketmq.producer.group}") privateString producerGroup; publicvoidsendMessage(String topic, String message) throwsException { DefaultMQProducer producer = newDefaultMQProducer(producerGroup); producer.setNamesrvAddr(nameServer); producer.setSendMsgTimeout(6000); producer.start(); // 创建消息对象,设置消息内容 org.apache.rocketmq.common.message.Message msg = neworg.apache.rocketmq.common.message.Message(topic, message.getBytes()); // 发送消息 producer.send(msg); producer.shutdown(); }} |
3.4 创建消费者
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
importorg.apache.rocketmq.client.consumer.DefaultMQPushConsumer;importorg.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;importorg.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;importorg.apache.rocketmq.client.exception.MQClientException;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;@ComponentpublicclassRocketMQConsumer { @Value("${rocketmq.name-server}") privateString nameServer; @Value("${rocketmq.consumer.group}") privateString consumerGroup; publicvoidstartConsumer(String topic) throwsMQClientException { DefaultMQPushConsumer consumer = newDefaultMQPushConsumer(consumerGroup); consumer.setNamesrvAddr(nameServer); // 订阅主题和标签,可以根据需要进行过滤 consumer.subscribe(topic, "*"); // 注册消息监听器 consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> { for(org.apache.rocketmq.common.message.MessageExt msg : msgs) { System.out.println("Received message: "+ newString(msg.getBody())); } returnConsumeConcurrentlyStatus.CONSUME_SUCCESS; }); consumer.start(); }} |
3.5 创建测试启动类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
importorder.rocketmq.RocketMQConsumer;importorder.rocketmq.RocketMQProducer;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublicclassRocketMQDemoApplication { publicstaticvoidmain(String[] args) throwsException { ConfigurableApplicationContext context = SpringApplication.run(RocketMQDemoApplication.class, args); RocketMQProducer producer = context.getBean(RocketMQProducer.class); producer.sendMessage("my-topic", "Hello, RocketMQ!"); RocketMQConsumer consumer = context.getBean(RocketMQConsumer.class); consumer.startConsumer("my-topic"); }} |
可以正常发送接收消息:

参考资料:https://blog.csdn.net/qq_42785250/article/details/132517338

浙公网安备 33010602011771号