ubuntu22.04 搭建RocketMQ

部署环境:

1. ubuntu22.04 
2. 64bit JDK 1.8
+

一、 RocketMQ部署

1.1 下载

下载地址:https://rocketmq.apache.org/zh/download/

本文使用 4.9.8版本:

image

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

 

image

image

 

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

显示下面的内容说明启动成功了:

image

二、测试

(1)发送消息(生产者)

//设置环境变量
export NAMESRV_ADDR=localhost:9876
//使用安装包的demo发送消息,
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

成功示例:

image

(2) 接收消息(消费者)

//设置环境变量
export NAMESRV_ADDR=localhost:9876
//接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

成功示例:

image

 (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;
@Component
publicclassRocketMQProducer {
    @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;
@Component
publicclassRocketMQConsumer {
    @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;
@SpringBootApplication
publicclassRocketMQDemoApplication {
    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");
    }
}

可以正常发送接收消息:

image

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

posted @ 2025-09-12 17:54  羊脂玉净瓶  阅读(13)  评论(0)    收藏  举报