Docker 部署 RocketMQ

server/2024/10/21 17:01:05/

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

docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/rocketmq:5.2.0

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

docker network create rocketmq

3.启动NameServer

启动 NameServer

docker run -d --name rmqnamesrv -p 9876:9876 --network rocketmq apache/rocketmq:5.2.0 sh mqnamesrv

验证 NameServer 是否启动成功

docker logs -f rmqnamesrv

4.启动 Broker+Proxy

配置 Broker 的IP地址

echo “brokerIP1=127.0.0.1” > broker.conf

启动 Broker 和 Proxy

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 是否启动成功

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 替换成 最新的版本.

 <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。

$ docker exec -it rmqbroker bash
$ sh mqadmin updatetopic -t TestTopic -c DefaultCluster

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


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两种消费者类型,您可以选择以下任意一种方式订阅消息。

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 容器

docker stop rmqnamesrv

停止 Broker 容器

docker stop rmqbroker

docker_rocketmqdashboard_164">docker 镜像安装rocketmq-dashboard

安装docker,拉取 rocketmq-dashboard 镜像

docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/rocketmq-dashboard:latest

docker 容器中运行 rocketmq-dashboard

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

$ mvn clean package -Dmaven.test.skip=true

运行 rocketmq-dashboard

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


http://www.ppmy.cn/server/133675.html

相关文章

【Java 22 | 9】 深入解析Java 22 :Foreign Function Memory API 的改进

Java 22 对 Foreign Function & Memory API(FFI,外部函数和内存 API)进行了重要改进,旨在增强 Java 与本地代码及内存的交互能力。这一特性使 Java 程序能够更方便地调用非 Java 代码,如 C/C++ 库,同时提供了一种安全、高效的方式来管理内存。 1. 基础介绍 什么是 …

机器学习驱动的工厂自动化

机器学习驱动的工厂自动化是一种利用先进的机器学习技术来提升生产效率、降低成本和提高产品质量的智能制造方法。这种自动化系统可以在制造流程中实时收集和分析大量数据&#xff0c;预测故障&#xff0c;优化生产&#xff0c;甚至在无人干预的情况下进行自适应操作。以下是机…

Qt(简介)

1. Qt简介 Qt是一个基于C的图形用户界面&#xff08;GUI&#xff09;框架&#xff0c;可以开发可视化人机交互程序&#xff0c;但是这并不是Qt的全部。Qt除了可以绘制漂亮的界面外&#xff0c;还包含很多其他的功能&#xff1a;多线程、数据库、图像处理、音视频处理、网络通信…

2024CSP-J模拟赛9————S12678

一&#xff0c;赛中得分 T1100T2100T350T440总分290 二&#xff0c;赛中概括 T1T2较快过&#xff0c;T3T4骗了90分&#xff08;意料之中&#xff0c;这么好骗分&#xff01;&#xff01;&#xff01;&#xff09;。 三&#xff0c;题目解析 涂格子(paint) 问题描述 现在有…

Redis设计与实现 学习笔记 第八章 对象

在前面的章节中&#xff0c;我们陆续介绍了Redis用到的所有主要数据结构。Redis并没有直接使用这些数据结构来实现键值对数据库&#xff0c;而是基于这些数据结构创建了一个对象系统&#xff0c;这个系统包含字符串对象、列表对象、哈希对象、集合对象、有序集合对象五种&#…

在日本生活压力大吗?

在日本生活的压力大小是一个相对主观的问题&#xff0c;因为它取决于个人的生活方式、价值观、经济状况、工作性质以及适应能力等多个因素。然而&#xff0c;从一些普遍的角度来看&#xff0c;我们可以对日本的生活压力进行一些概括性的分析。 首先&#xff0c;日本是一个高度发…

IDEA下载安装

文章目录 1、下载安装包2、安装IDEA3、全局配置4、安装插件5、关闭合并菜单栏 1、下载安装包 IDEA官网下载最新IDEA。 上面的ULtimate是旗舰版&#xff0c;试用30天&#xff0c;之后是需要收费的&#xff0c;下面黑色区域的Community是社区版&#xff0c;功能不如旗舰版丰富&a…

6个最佳核心应用仪表盘构建工具

核心应用仪表盘&#xff08;Core App Dashboard&#xff09;的概念或许你不太熟悉&#xff0c;但仪表盘你一定不陌生。 从汽车的仪表盘显示速度和油量&#xff0c;到运动手环仪表盘追踪步数和心率&#xff0c;再到金融投资仪表盘监控股票和基金的实时行情&#xff0c;它们通过…