Docker 部署 RocketMQ

1.拉取RocketMQ镜像

这里以dockerhub上 RocketMQ 5.2.0版本的镜像为例,介绍部署过程。

bash 复制代码
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/rocketmq:5.2.0

2.创建容器共享网络

RocketMQ 中有多个服务,需要创建多个容器,创建 docker 网络便于容器间相互通信。

bash 复制代码
docker network create rocketmq

3.启动NameServer

启动 NameServer

bash 复制代码
docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq apache/rocketmq:5.2.0 sh mqnamesrv

验证 NameServer 是否启动成功

bash 复制代码
docker logs -f rmqnamesrv

4.启动 Broker+Proxy

配置 Broker 的IP地址

echo "brokerIP1=127.0.0.1" > broker.conf

启动 Broker 和 Proxy

bash 复制代码
docker run -d \
--name rmqbroker \
--network rocketmq \
-p 10912:10912 -p 10911:10911 -p 10909:10909 \
-p 8080:8080 -p 8081:8081 \
-e "NAMESRV_ADDR=rmqnamesrv:9876" \
-v ./broker.conf:/home/rocketmq/rocketmq-5.2.0/conf/broker.conf \
registry.cn-hangzhou.aliyuncs.com/qiluo-images/rocketmq:5.2.0 sh mqbroker --enable-proxy \
-c /home/rocketmq/rocketmq-5.3.0/conf/broker.conf

验证 Broker 是否启动成功

bash 复制代码
docker exec -it rmqbroker bash -c "tail -n 10 /home/rocketmq/logs/rocketmqlogs/proxy.log"

5.SDK测试消息收发

工具测试完成后,我们可以尝试使用 SDK 收发消息。这里以 Java SDK 为例介绍一下消息收发过程,可以从 rocketmq-clients 中参阅更多细节。

在IDEA中创建一个Java工程。

在 pom.xml 文件中添加以下依赖引入Java依赖库,将 rocketmq-client-java-version 替换成 最新的版本.

bash 复制代码
 <dependency>
	    <groupId>org.apache.rocketmq</groupId>
	    <artifactId>rocketmq-client</artifactId>
	    <version>5.2.0</version>
	</dependency>

注意 镜像是5.2.0 那么 依赖也必须是5.2.0

进入broker容器,通过mqadmin创建 Topic。

bash 复制代码
$ docker exec -it rmqbroker bash
$ sh mqadmin updatetopic -t TestTopic -c DefaultCluster

在已创建的Java工程中,创建发送普通消息程序并运行,示例代码如下:

bash 复制代码
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;

public class RocketMQProducer {
    public static void main(String[] args) {
        // 创建一个生产者
        DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");

        try {
            // 设置 NameServer 的地址
            producer.setNamesrvAddr("localhost:9876");
            producer.start();

            // 创建消息
            Message msg = new Message("TopicTest", "TagA", "KeyA", "Hello RocketMQ".getBytes());

            // 发送消息
            producer.send(msg);
            System.out.println("Message sent: " + new String(msg.getBody()));

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭生产者
            producer.shutdown();
        }
    }
}

在已创建的Java工程中,创建订阅普通消息程序并运行。Apache RocketMQ 支持SimpleConsumer和PushConsumer两种消费者类型,您可以选择以下任意一种方式订阅消息。

bash 复制代码
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;

public class RocketMQConsumer {
    public static void main(String[] args) {
        // 创建一个消费者
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ConsumerGroupName");

        try {
            // 设置 NameServer 的地址
            consumer.setNamesrvAddr("localhost:9876");
            consumer.subscribe("TopicTest", "*"); // 订阅主题和标签

            // 注册消息监听器
            consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
                for (MessageExt msg : msgs) {
                    System.out.println("Message received: " + new String(msg.getBody()));
                }
                return null; // 返回 null 表示消费成功
            });

            // 启动消费者
            consumer.start();
            System.out.println("Consumer started");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 停止容器
    完成实验后,我们可以通过以下方式停止容器。

停止 NameServer 容器

bash 复制代码
docker stop rmqnamesrv

停止 Broker 容器

bash 复制代码
docker stop rmqbroker

docker 镜像安装rocketmq-dashboard

安装docker,拉取 rocketmq-dashboard 镜像

bash 复制代码
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/rocketmq-dashboard:latest

docker 容器中运行 rocketmq-dashboard

bash 复制代码
docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8080:8080 -t registry.cn-hangzhou.aliyuncs.com/qiluo-images/rocketmq-dashboard:latest

namesrv.addr:port 替换为 rocketmq 中配置的 nameserver 地址:端口号

开放端口号:8080,9876,10911,11011 端口

云服务器:设置安全组访问规则

本地虚拟机:关闭防火墙,或 -add-port

源码安装

源码地址:apache/rocketmq-dashboard

下载并解压,切换至源码目录 rocketmq-dashboard-master/

① 编译 rocketmq-dashboard

① 编译 rocketmq-dashboard

bash 复制代码
$ mvn clean package -Dmaven.test.skip=true

运行 rocketmq-dashboard

bash 复制代码
$ java -jar target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar

示:Started App in x.xxx seconds (JVM running for x.xxx) 启动成功

浏览器页面访问:namesrv.addr:8080

关闭 rocketmq-dashboard : ctrl + c

再次启动:执行 ②

tips:下载后的源码需要上传到 Linux 系统上编译,本地编译可能会报错。

相关推荐
小张是铁粉2 小时前
docker学习二天之镜像操作与容器操作
学习·docker·容器
烟雨书信2 小时前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记2 小时前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花2 小时前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay2 小时前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu2 小时前
redisSearch docker安装
运维·redis·docker·容器
srrsheng3 小时前
RocketMQ面试题
rocketmq
IT成长日记6 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
热爱生活的猴子6 小时前
阿里云服务器正确配置 Docker 国内镜像的方法
服务器·阿里云·docker
FrankYoou10 小时前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker