当前位置: 首页 > news >正文

Docker 部署 RocketMQ

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

相关文章:

Docker 部署 RocketMQ

1.拉取RocketMQ镜像 这里以dockerhub上 RocketMQ 5.2.0版本的镜像为例&#xff0c;介绍部署过程。 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/rocketmq:5.2.02.创建容器共享网络 RocketMQ 中有多个服务&#xff0c;需要创建多个容器&#xff0c;创建 docke…...

linux安装mysql数据库(最完整的yum源安装)

1.下载YUM库 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm这里介绍一下wegt命令 wget 是一个非常强大的命令行工具&#xff0c;用于从网络上下载文件。它支持HTTP、HTTPS和FTP协议&#xff0c;并且可以通过HTTP代理进行下载。以下是 wget 的…...

工业物联网关-TCP透传

TCP透传功能提供类似于DTU(Data Transmit Unit)的功能&#xff0c;用户在网络端使用TCP协议连接网关&#xff0c;与串口通道绑定&#xff0c;建立起TCP与串口的通道&#xff0c;网关相当于一个中转点。 菜单选择"数据上行-tcp透传"&#xff0c;查看当前透传通道列表&…...

sentinel原理源码分析系列(六)-统计指标

调用链和统计节点构建完成&#xff0c;进入统计指标插槽&#xff0c;统计指标在最后执行的&#xff0c;等后面的插槽执行完&#xff0c;资源调用完成了&#xff0c;根据资源调用情况累计。指标统计是最重要的插槽&#xff0c;所有的功能都依靠指标数据&#xff0c;指标的正确与…...

【代理模式使用场景】

一般来说&#xff0c;代理模式使用场景是远程代理、虚拟代理、安全代理等。下面来详细介绍下这三个场景是什么&#xff0c;实现原理和特点。不过在介绍三个场景前&#xff0c;我们还是先来回顾下代理模式。 代理模式 定义 是结构型设计模式&#xff0c;引入一个对象控制对另…...

ARM-8 代码还原动态调试之 pstree 条件表达式

out_string(lvl level - 1 ? last ? sym->last_2 : sym->branch_2 : more[lvl 1] ? sym->vert_2 : sym->empty_2); 条件表达式执行顺利&#xff1a; lvl level - 1 ? last ? sym->last_2 : sym->branch_2 : more[lvl 1] ?…...

Spring Boot技术栈在电影评论网站中的应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

DDOS防护

DDoS攻击简介 分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种网络攻击方式&#xff0c;通过控制大量的受感染系统&#xff08;称为“僵尸网络”&#xff09;向目标服务器发送大量的网络流量或请求&#xff0c;目的是使目标服务器超载&#xff0c;无法提供正常服务。这…...

【Vue】Vue(九)OptionsAPI与CompositionAPI的区别

文章目录 OptionsAPI与CompositionAPI在代码使用和逻辑上的区别一、代码使用方面的区别&#xff08;一&#xff09;组件定义的结构&#xff08;二&#xff09;响应式数据的定义与使用&#xff08;三&#xff09;逻辑复用的实现方式 二、逻辑方面的区别&#xff08;一&#xff0…...

MySQL 【日期】函数大全(四)

目录 1、MAKEDATE() 根据年份和一年中天数创建一个日期并返回。 2、MAKETIME() 指定的时、分、秒创建一个时间并返回。 3、MINUTE() 函数提取并返回时间的分钟部分。 4、MONTH() 函数提取日期的月份部分并作为数字返回。 5、MONTHNAME() 返回给定日期的月份的名字。 6、N…...

Jlink 直接读取单片机数据

1. 驱动版本 因人而异&#xff0c;这里我使用的是 “J-Flash V6.96” 本人驱动链接&#xff1a;夸克网盘 提取码&#xff1a;rgzk 2. 打开软件 3. 创建jlink工程 4. 选择芯片 此处本人使用芯片 “STM32F103VCT6” 5. 连接单片机 连接成功反馈 6. 读取单片机内部数据 …...

VScode运行C语言终端输出中文乱码问题解决方案

VScode运行C语言输出中文乱码问题解决方案 由于 VSCode 的终端是对系统的 cmd 命令行工具的调用&#xff0c;而 cmd 的默认编码为 GBK。当我们在 VSCode 中以 UTF-8 编码进行代码编写且代码里含有中文字符时&#xff0c;在终端运行代码便会出现中文乱码现象。要解决此问题&…...

Leetcode刷题. 贪心算法

贪心算法&#xff1a; 比较传统的解释&#xff1a;将整个问题拆解为几个小问题&#xff0c;找到小问题的最优解&#xff0c;加起来就是整个问题的全局最优解。对于现在的我理解贪心就是一种感觉&#xff0c;给出证明很难&#xff0c;解题思路一般就是认真读题&#xff0c;发掘题…...

强化学习的数学原理-01基本概念

state: T h e s t a t u s o f a g e n t w i t h r e s p e c t t o t h e e n v i r o n m e n t The \quad status \quad of \quad agent \quad with \quad respect \quad to \quad the \quad environment Thestatusofagentwithrespecttotheenvironment (agent 相对于环境的…...

D41【python 接口自动化学习】- python基础之函数

day41 函数参数传递错误 学习日期&#xff1a;20241018 学习目标&#xff1a;函数&#xfe63;-54 避坑指南&#xff1a;列表作为参数传递出错了怎么办&#xff1f; 学习笔记&#xff1a; 列表类型的特殊性 list1[x,y,z] tuple1(list1,b,c)# 修改元组中的列表&#xff0c;会…...

思迅商云8修改最大找零金额

执行如下语句前请备份数据库 -POS收银找零金额最大数 --把下面SQL中的 1000.00 改成你想要的金额数&#xff0c;再到查询分析器中执行&#xff1a; --总店 use hbposv8 go insert t_sys_system (sys_var_id, sys_var_value, sys_var_name) values (pos_max_givchg, 1000.00, 最…...

Lumerical学习——分析工具(Analysis tools)

一、分析工具和模拟环境&#xff08;Analysis tools and the simulation environment&#xff09; 模拟计算完成后&#xff0c;模拟计算数据紧接着写到模拟工程文件中&#xff1b;甚至当模拟计算提前结束时计算得到的部分数据集也会写到文件中。当模拟完成后单击退出按钮、或者…...

思迅商云8会员积分全部清0

请您备份数据库后执行以下语句&#xff1a; declare card_id varchar(20), acc_num numeric(16,4), dec_num numeric(16,4), minus_num numeric(16,4), branch_no varchar(4), count int select branch_nosys_var_value fro…...

$nextTick原理

一、什么是 $nextTick $nextTick 是 Vue 实例上的一个方法&#xff0c;允许我们在下次 DOM 更新循环结束后执行一个回调。这通常用于需要访问更新后的 DOM状态的场景。由于 Vue 在数据变化后并不会立即更新 DOM&#xff0c;而是进行异步批处理&#xff0c;使用 $nextTick可以保…...

python办公:批量PDF合并—通用版

目录 专栏导读1、库的介绍2、库的安装3、核心代码3、提供测试PDF生成代码5、完整代码进阶版总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双手 &#x1f3f3;️‍&#x1f308; 博客主页&#xff1a;请点击——> 一…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

作为点的对象CenterNet论文阅读

摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表&#xff0c;并对每一个位置进行分类。这种做法既浪费又低效&#xff0c;并且需要额外的后处理。在本文中&#xff0c;我们采取了不同的方法。我们将物体建模为单…...

【芯片仿真中的X值:隐藏的陷阱与应对之道】

在芯片设计的世界里&#xff0c;X值&#xff08;不定态&#xff09;就像一个潜伏的幽灵。它可能让仿真测试顺利通过&#xff0c;却在芯片流片后引发灾难性后果。本文将揭开X值的本质&#xff0c;探讨其危害&#xff0c;并分享高效调试与预防的实战经验。    一、X值的本质与致…...

.Net Framework 4/C# 面向对象编程进阶

一、继承 (一)使用继承 子类可以继承父类原有的属性和方法,也可以增加原来父类不具备的属性和方法,或者直接重写父类中的某些方法。 C# 中使用“:”来表示两个类的继承。子类不能访问父类的私有成员,但是可以访问其公有成员,即只要使用 public 声明类成员,就既可以让一…...

React 进阶特性

1. ref ref 是 React 提供的一种机制,用于访问和操作 DOM 元素或 React 组件的实例。它可以用于获取某个 DOM 元素的引用,从而执行一些需要直接操作 DOM 的任务,例如手动设置焦点、选择文本或触发动画。 1.1. 使用 ref 的步骤 1. 创建一个 ref:使用 React.createRef 或 …...

node 进程管理工具 pm2 的详细说明 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录 7

前言 我以 Ubuntu Server 打造的 NodeJS 服务器为主题的系列文章&#xff0c;经过五篇博客&#xff0c;我们顺利的 安装了 ubuntu server 服务器&#xff0c;并且配置好了 ssh 免密登录服务器&#xff0c;安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装…...