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

相关推荐
蜜獾云12 分钟前
docker 安装雷池WAF防火墙 守护Web服务器
linux·运维·服务器·网络·网络安全·docker·容器
年薪丰厚1 小时前
如何在K8S集群中查看和操作Pod内的文件?
docker·云原生·容器·kubernetes·k8s·container
zhangj11251 小时前
K8S Ingress 服务配置步骤说明
云原生·容器·kubernetes
岁月变迁呀1 小时前
kubeadm搭建k8s集群
云原生·容器·kubernetes
墨水\\1 小时前
二进制部署k8s
云原生·容器·kubernetes
Source、1 小时前
k8s-metrics-server
云原生·容器·kubernetes
颜淡慕潇2 小时前
【K8S问题系列 |19 】如何解决 Pod 无法挂载 PVC问题
后端·云原生·容器·kubernetes
大熊程序猿4 小时前
K8s证书过期
云原生·容器·kubernetes
摸鱼也很难7 小时前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
鸠摩智首席音效师10 小时前
Docker 中如何限制CPU和内存的使用 ?
docker·容器