005 公网访问 docker rocketmq
文章目录
- 创建自定义网络
- 创建NameServer容器
- 创建Broker容器
- 正式开始
- 启动 Nameserver 容器
- 启动 Broker 容器并关联 Nameserver
- docker exec -it rmqbroker vi /etc/rocketmq/broker.conf
- 检查 namesrv 解析
- 检查 Broker 注册状态
- Nameserver 日志
- Broker 日志
- 检查容器日志
- 手动指定 Broker 地址创建 Topic
- topic创建
- 验证 Topic 是否成功创建
- 检查 RocketMQ 集群状态
- 自动创建消费者组(Consumer Group)
- 查看消费者组列表
- 关联配置(可选)
- 注意事项
- 手动创建消费者组(备用方案)
创建自定义网络
docker network create my-rocketmq-network
创建NameServer容器
docker run -di --network my-rocketmq-network -p 9876:9876 --name=rmqserver \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
-e "JAVA_OPTS=-Duser.home=/opt" \
foxiswho/rocketmq:server-4.5.1
创建Broker容器
docker run -di --network my-rocketmq-network -p 10911:10911 -p 10909:10909 --name=rmqbroker \
-e "JAVA_OPTS=-Duser.home=/opt" \
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m -Xmn128m" \
foxiswho/rocketmq:broker-4.5.1
sudo iptables -t nat -L -n --line-numbers
使用 -n 参数禁止端口到服务名称的解析
NAT表主要用于网络地址转换,包括DNAT(目标地址转换)和SNAT/MASQUERADE(源地址转换)。PREROUTING链处理进入的数据包,修改目标地址;POSTROUTING链处理离开的数据包,修改源地址。DOCKER链是Docker服务自动生成的规则,用于容器网络的管理。
MASQUERADE的作用是动态源地址转换,常用于动态IP的环境;DNAT则是目标地址转换,用于端口转发。同时,Docker创建的规则可能会影响用户手动添加的规则,尤其是在PREROUTING链中规则顺序的问题,Docker的规则可能优先执行,导致用户规则未生效。
Chain INPUT (policy ACCEPT)
num target prot opt source destinationChain INPUT (policy ACCEPT)
无规则:直接接受所有流量(默认策略为 ACCEPT)。
num target prot opt source destination
1 DOCKER all -- anywhere !loopback/8 ADDRTYPE match dst-type LOCAL含义:将所有目标地址为 本地主机 IP 且源地址 不是环回网段(!loopback/8,即非 127.0.0.0/8)的流量转发到 DOCKER 链。隐藏信息:Docker 使用此规则处理从本地主机发往容器网络的流量。
删除 Docker 的冲突规则:sudo iptables -t nat -D DOCKER 7
sudo iptables -t nat -I PREROUTING 1 -p tcp --dport 9876 -j DNAT --to-destination 内网ip:9876
正式开始
启动 Nameserver 容器
docker run -d --name rmqserver -p 9876:9876 -e "JAVA_OPT_EXT=-server -Xms256m -Xmx256m -Xmn128m" -e "JAVA_OPTS=-Duser.home=/opt" foxiswho/rocketmq:server-4.3.2
启动 Broker 容器并关联 Nameserver
docker run -d --name rmqbroker -p 10911:10911 -p 10909:10909 --link rmqserver:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPT_EXT=-server -Xms256m -Xmx256m -Xmn128m" -e "JAVA_OPTS=-Duser.home=/opt" -e "BROKER_IP1=<公网IP>" foxiswho/rocketmq:broker-4.3.2
–link rmqserver:namesrv # 关联 Nameserver 容器
-e “NAMESRV_ADDR=namesrv:9876” # 使用容器别名访问 Nameserver
docker exec -it rmqbroker vi /etc/rocketmq/broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 公网ip
autoCreateTopicEnable = true
listenPort = 10911
haListenPort = 10909
namesrvAddr = 公网ip:9876
autoCreateProducerGroup=true
检查 namesrv 解析
ping namesrv # 应返回 172.17.0.3(rmqserver 容器的 IP)
cat /etc/hosts # 确认 namesrv 指向 rmqserver 的 IP
检查 Broker 注册状态
查看 Nameserver 中的 Broker 列表:
docker exec -it rmqserver sh mqadmin clusterList -n namesrv:9876
Nameserver 日志
docker logs -f rmqserver
Broker 日志
docker logs -f rmqbroker
检查容器日志
docker logs -f rmqserver | grep "boot success" # Nameserver 日志
docker logs -f rmqbroker | grep "boot success" # Broker 日志
手动指定 Broker 地址创建 Topic
如果自动注册失败,直接指定 Broker 的地址:
docker exec -it rmqbroker sh mqadmin updateTopic \-n namesrv:9876 \-t TopicTest \-b "Broker 的公网 IP:10911"
topic创建
docker exec -it rmqbroker sh mqadmin updateTopic -n namesrv:9876 -t TopicTest -b "公网ip:10911"
验证 Topic 是否成功创建
docker exec -it rmqbroker sh mqadmin topicList -n namesrv:9876
sudo iptables -A INPUT -p tcp --dport 10909 -j ACCEPT
网络模式选择
Bridge 模式:Docker 默认使用 bridge 网络模式,容器通过端口映射与宿主机通信。这种方式适合大多数场景,且配置简单。
Host 模式:如果你使用 host 模式,容器会直接使用宿主机的网络栈,端口映射不再需要,但可能会带来端口冲突的问题。
NAT 模式:NAT 模式通常用于虚拟机网络配置,Docker 容器一般不使用 NAT 模式。
检查 RocketMQ 集群状态
通过命令
mqadmin clusterList -n 192.168.33.1:9876
确认 Broker 和 NameServer 状态正常。
查看 Broker 日志
检查 Broker 日志($ROCKETMQ_HOME/logs/rocketmqlogs/broker.log),排查是否有存储或网络错误。
使用命令行工具验证
查询消息:
mqadmin queryMsgByKey -n 192.168.33.1:9876 -t YourTopic -k YourKey
查看生产者组列表:
mqadmin producerConnection -n 192.168.33.1:9876 -g MyProducerGroup
自动创建消费者组(Consumer Group)
在RocketMQ中,订阅组(Subscription Group)包含消费者组的信息,所以自动创建订阅组实际上就是自动创建消费者组。
还需要考虑不同RocketMQ版本的差异。例如,4.5.0之后的版本可能默认行为不同,或者某些配置项有变化。
默认情况下,RocketMQ Broker 不会自动创建消费者组。需要通过以下配置显式启用:
Broker 配置文件(broker.conf)
# 允许自动创建订阅组(Subscription Group,包含消费者组)
autoCreateSubscriptionGroup = true# 设置 Broker 权限(6 表示读写权限)
brokerPermission = 6
关键配置解释
autoCreateSubscriptionGroup=true
允许 Broker 在消费者首次连接时自动创建订阅组(Subscription Group),即消费者组。
brokerPermission=6
确保 Broker 有权限自动创建组(默认值为 6,即读写权限,一般无需修改)。
查看消费者组列表
通过 RocketMQ 控制台或命令行工具检查消费者组是否自动创建:
mqadmin consumerConnection -n <namesrv-address> -g YourConsumerGroup
检查 Broker 日志
观察 Broker 日志($ROCKETMQ_HOME/logs/rocketmqlogs/broker.log),确认无权限错误或组创建失败信息。
关联配置(可选)
调整消费者组重试队列
如果消费者组需要重试队列(Retry Queue),可配置:
# 每个订阅组的重试队列数量(默认 1)
retryQueueNums = 1# 消费重试次数(默认 16 次)
retryMaxTimes = 16
注意事项
生产环境建议
自动创建功能适合开发和测试环境。生产环境建议手动创建消费者组,并通过控制台或 CLI 管理,避免组名冲突或权限问题。
权限控制
如果 Broker 集群启用了 ACL(访问控制列表),需确保消费者客户端有权限创建订阅组。
版本兼容性
RocketMQ 4.5.0+ 版本支持 autoCreateSubscriptionGroup,低版本需升级。
手动创建消费者组(备用方案)
如果禁用自动创建,可通过命令行手动创建订阅组:
mqadmin updateSubGroup -n <namesrv-address> -c <cluster-name> -g YourConsumerGroup
相关文章:
005 公网访问 docker rocketmq
文章目录 创建自定义网络创建NameServer容器创建Broker容器正式开始启动 Nameserver 容器启动 Broker 容器并关联 Nameserverdocker exec -it rmqbroker vi /etc/rocketmq/broker.conf检查 namesrv 解析检查 Broker 注册状态Nameserver 日志Broker 日志检查容器日志手动指定 Br…...
C++11中的右值引用和完美转发
C11中的右值引用和完美转发 右值引用 右值引用是 C11 引入的一种新的引用类型,用 && 表示。它主要用于区分左值和右值,并且可以实现移动语义,避免不必要的深拷贝,提高程序的性能。左值通常是可以取地址的表达式…...
txt 转 json 使用python语言
需求: 把如下的txt文档转成json输出 代码 import jsondef txt_to_json(input_file, output_file):data_list []with open(input_file, r, encodingutf-8) as f:for line in f:# 分割数据并去除换行符parts line.strip().split(,)print(f"{parts}")print(type(par…...
Android Logcat 高效调试指南
工具概览 Logcat 是 Android SDK 提供的命令行日志工具,支持灵活过滤、格式定制和实时监控,官方文档详见 Android Developer。 基础用法 命令格式 [adb] logcat [<option>] ... [<filter-spec>] ... 执行方式 直接调用(通过ADB守…...
【Linux】从入门到精通:Make与Makefile完全指南
欢迎来到 CILMY23 的博客 🏆本篇主题为:从入门到精通:Make与Makefile完全指南 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:C | C语言 | Linux | Python | 数据结构和算法 | 算法专题 …...
leetcode0014 最长公共前缀 -easy
1 题目:最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入&a…...
【星云 Orbit-F4 开发板】07. 用判断数据尾来接收据的串口通用程序框架
【星云 Orbit-F4 开发板】用判断数据尾来接收一串数据的串口通用程序框架 摘要 本文介绍了一种基于STM32F407微控制器的串口数据接收通用程序框架。该框架通过判断数据尾来实现一串数据的完整接收,适用于需要可靠数据传输的应用场景。本文从零开始,详细…...
LLVM - 编译器前端 - 将源文件转换为抽象语法树(一)
一:概述 编译器通常分为两部分——前端和后端。在本文中,我们将实现编程语言的前端部分——即主要处理源语言的部分。我们将学习现实世界编译器使用的技术,并将其应用到我们的编程语言中。 本文将从定义编程语言的语法开始,最终生成一个抽象语法树(AST),这是代码生成的基…...
02_NLP文本预处理之文本张量表示法
文本张量表示法 概念 将文本使用张量进行表示,一般将词汇表示为向量,称为词向量,再由各个词向量按顺序组成矩阵形成文本表示 例如: ["人生", "该", "如何", "起头"]># 每个词对应矩阵中的一个向量 [[1.32, 4,32, 0,32, 5.2],[3…...
深圳SMT贴片加工核心工艺解析
内容概要 深圳作为全球电子制造产业的核心集聚区,其SMT贴片加工技术始终引领行业创新方向。本文聚焦深圳电子制造企业在高密度、微型化组件加工中的核心工艺体系,系统解析从锡膏印刷到成品检测的全流程关键技术。通过梳理SMT产线中设备参数设定、工艺条…...
P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair
P8720 [蓝桥杯 2020 省 B2] 平面切分--set、pair 题目 分析一、pair1.1pair与vector的区别1.2 两者使用场景两者组合使用 二、set2.1核心特点2.2set的基本操作2.3 set vs unordered_set示例:统计唯一单词数代码 题目 分析 大佬写的很明白,看这儿 我讲讲…...
突破传统:用Polars解锁ICU医疗数据分析新范式
一、ICU数据革命的临界点 在重症监护室(ICU),每秒都在产生关乎生死的关键数据:从持续监测的生命体征到高频更新的实验室指标,从呼吸机参数到血管活性药物剂量,现代ICU每天产生的数据量级已突破TB级别。传统…...
命名实体识别与文本生成算法
在自然语言处理(NLP)的浩瀚星空中,命名实体识别(Named Entity Recognition, NER)与文本生成算法如同两颗璀璨的星辰,各自闪耀,又相互辉映,共同推动着人工智能技术在语言理解与生成领…...
10.3 指针进阶_代码分析
代码分析 9. 指针和数组代码解析一维数组字符数组字符串二维数组 10. 指针代码分析eg1eg2eg3eg4eg5eg6eg7eg8 10.1 指针进阶_数组指针 10.2 指针进阶_函数指针 9. 指针和数组代码解析 数组名arr是首元素地址 例外: 1. sizeof(arr),计算整个数组的大小&…...
深入理解推理语言模型(RLM)
大语言模型从通用走向推理,万字长文解析推理语言模型,建议收藏后食用。 本文基于苏黎世联邦理工学院的论文《Reasoning Language Models: A Blueprint》进行整理,你将会了解到: 1、RLM的演进与基础:RLM融合LLM的知识广…...
在Nginx上配置并开启WebDAV服务的完整指南
在Nginx上配置并开启WebDAV服务的完整指南 如何在 Nginx 上开启 WebDAV 服务 要在 Nginx 上开启 WebDAV 服务,你需要配置 Nginx 以支持 WebDAV 请求。以下是详细的步骤: 1. 确保 Nginx 安装了 WebDAV 模块 Nginx 的 WebDAV 功能由 http_dav_module 模…...
大语言模型学习
大语言模型发展历程 当前国内外主流LLM模型 一、国外主流LLM LLaMA2 Meta推出的开源模型,参数规模涵盖70亿至700亿,支持代码生成和多领域任务适配57。衍生版本包括Code Llama(代码生成优化)和Llama Chat(对…...
夜天之书 #106 Apache 软件基金会如何投票选举?
近期若干开源组织进行换届选举。在此期间,拥有投票权的成员往往会热烈讨论,提名新成员候选人和治理团队的候选人。虽然讨论是容易进行的,但是实际的投票流程和运作方式,在一个成员众多的组织中,可能会有不少成员并不清…...
从Aurora看Xanadu可扩展模块化光量子计算机的现状与未来展望
从Aurora看Xanadu可扩展光量子计算机的现状与未来展望 一、引言 1.1 研究背景与意义 随着信息技术的飞速发展,经典计算机在许多领域取得了巨大的成功,但在面对一些复杂问题时,其计算能力逐渐接近极限。量子计算机作为一种新型计算设备,基于量子力学原理,能够实现并行计算…...
WPS如何添加论文中的文献引用右上角小标
给参考文献标号 1、将光标位于参考文献之前,然后点击如下图所示位置 2、点击相应的列表,然后点击确定 然后选中第一行,点击格式刷,刷一下其余行 在原文中插入右上角的引用标 1、使光标位于想插入引用光标处,点击交叉…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
