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 系统上编译,本地编译可能会报错。

相关推荐
c无序34 分钟前
Docker-技术架构演进之路
docker
努力的小T4 小时前
使用 Docker 部署 Apache Spark 集群教程
linux·运维·服务器·docker·容器·spark·云计算
东风微鸣6 小时前
TTRSS 迁移实战
docker·云原生·kubernetes·可观察性
转身後 默落7 小时前
04.Docker 镜像命令
docker·容器·eureka
IT_张三7 小时前
Docker+Kubernetes_第一章_Docker入门
java·docker·kubernetes
jessezappy8 小时前
记录:Docker 安装记录
docker·安装·ollama·软链接
三天不学习8 小时前
如何在 Ubuntu 上安装 Docker:详细步骤指南
ubuntu·docker·eureka
仇辉攻防9 小时前
【云安全】云原生- K8S 污点横移
web安全·网络安全·云原生·容器·kubernetes·k8s·安全威胁分析
stone.eye9 小时前
阿里云通过docker安装skywalking及elasticsearch操作流程
elasticsearch·阿里云·docker·skywalking
望获linux11 小时前
如何在望获实时 Linux & 京博航友善 NanoPC-T6 上部署 Docker
linux·运维·服务器·docker·eureka·开源软件