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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Docker Desktop启动后Docker Engine stopped问题

一、问题描述 当我们更新了Docker Desktop后,在重新打开就显示【Docker Engine stopped(Docker引擎已经停止)】,无法正常使用Docker,如下图所示: 二、问题分析 1、检查电脑主板的CPU是否开启虚拟化; 2、需检查Docker所需的功能是否开启; 3、检查WSL是否匹配; Docker的…

MongoDB—(一主、一从、一仲裁)副本集搭建

MongoDB集群介绍&#xff1a; MongoDB 副本集是由多个MongoDB实例组成的集群&#xff0c;其中包含一个主节点&#xff08;Primary&#xff09;和多个从节点&#xff08;Secondary&#xff09;&#xff0c;用于提供数据冗余和高可用性。以下是搭建 MongoDB 副本集的详细步骤&am…

C++STL---<limits>

C <limits> 头文件&#xff1a; <limits> 头文件是 C 标准库中用于获取各种数据类型的数值范围、精度等信息的工具。它通过模板类 std::numeric_limits 提供了对基本数据类型&#xff08;如 int、float、double 等&#xff09;的详细属性查询功能。通过 std::nume…

蓝桥杯自我复习打卡

总复习&#xff0c;打卡1. 一。排序 1。选段排序 太可恶了&#xff0c;直接全排输出&#xff0c;一个测试点都没过。 AC 首先&#xff0c;这个【l,r】区间一定要包含p,或者q&#xff0c;pq一个都不包含的&#xff0c;[l,r]区间无论怎么变&#xff0c;都对ans没有影响。 其次&…

Flutter_学习记录_实现列表上拉加载更多的功能

可以用ScrollController组件来实现这样列表上拉加载更多的功能: 1. 定义变量 在StatefulWidget 的组件内&#xff0c;添加三个属性&#xff1a; // 滚动视图的控制器final ScrollController _scrollController ScrollController();// 是否已显示了上拉加载中bool _isShowM…

【Linux】【网络】不同子网下的客户端和服务器通信其它方式

【Linux】【网络】不同子网下的客户端和服务器通信其它方式 那么&#xff0c;在 NAT 环境下&#xff0c;应该如何让内网设备做为服务器&#xff0c;使内网设备被外部连接&#xff1f; 1 多拨 部分运营商&#xff0c;支持在多个设备上&#xff0c;通过 PPPoE 登录同一个宽带账…

《Python百练成仙》31-40章(不定时更新)

第卅一章 函数结丹def开紫府 罗酆山的鬼门关吞吐着猩红的变量阴风&#xff0c;每个风眼都涌动着作用域混乱的灵力乱流。叶军手握薛香遗留的丹田玉简&#xff0c;玉简表面浮现出残缺的函数符文&#xff1a; def 凝聚金丹(灵气):道基 灵气 * 0.618print(金丹品质) # 作用域外变…

六十天前端强化训练之第一天到第七天——综合案例:响应式个人博客项目

欢迎来到编程星辰海的博客讲解 目录 前言回顾 HTML5与CSS3基础 一、知识讲解 1. 项目架构设计&#xff08;语义化HTML&#xff09; 2. 响应式布局系统&#xff08;Flex Grid&#xff09; 3. 样式优先级与组件化设计 4. 完整响应式工作流 二、核心代码示例 完整HTML结…

测试的BUG分析

在了解BUG之前,我们要先了解软件测试的生命周期,因为大多数BUG都是在软件测试的过程中被发现的 软件测试的生命周期 在了解 软件测试的生命周期 之前,我们要先了解 软件的生命周期 ,虽然他们之间只差了两个字,但是差距还是很大的 首先是 软件生命周期 ,这个是站在 软件 的角…

【洛谷贪心算法题】P1094纪念品分组

该题运用贪心算法&#xff0c;核心思想是在每次分组时&#xff0c;尽可能让价格较小和较大的纪念品组合在一起&#xff0c;以达到最少分组的目的。 【算法思路】 输入处理&#xff1a;首先读取纪念品的数量n和价格上限w&#xff0c;然后依次读取每件纪念品的价格&#xff0c;…

[STM32]从零开始的STM32 BSRR、BRR、ODR寄存器讲解

一、前言 学习STM32一阵子以后&#xff0c;相信大家对STM32 GPIO的控制也有一定的了解了。之前在STM32 LED的教程中也教了大家如何使用寄存器以及库函数控制STM32的引脚从而点亮一个LED&#xff0c;之前的寄存器只是作为一个引入&#xff0c;并没有深层次的讲解&#xff0c;在教…

SQL分组问题

下列为电商公司用户访问时间数据 统计某个用户连续的访问记录&#xff0c;如果时间间隔小于60s&#xff0c;就分为一组 id ts 1001 17523641234 1001 17523641256 1002 17523641278 1001 17523641334 1002 17523641434 1001 17523641534 1001 17523641544 1002 17523…

3月2日 C++日常习题测试一答案

C测试题答案与讲解 一、填空题答案及讲解 答案&#xff1a;const 讲解&#xff1a;在 C 中&#xff0c;const关键字用于定义常量&#xff0c;一旦定义&#xff0c;其值不能被修改。例如const int num 10;&#xff0c;这里的num就是一个常量。 答案&#xff1a;3 讲解&…

2W8000字 LLM架构文章阅读指北

❝ 大模型架构专栏已经更新了30多篇文章。完整的专栏内容欢迎订阅&#xff1a; LLM 架构专栏 1、LLM大模型架构专栏|| 从NLP基础谈起 2、 LLM大模型架构专栏|| 自然语言处理&#xff08;NLP&#xff09;之建模 3、 LLM大模型架构之词嵌入&#xff08;Part1&#xff09; 3、 LLM…

SP导入智能材质球

智能材质球路径 ...\Adobe Substance 3D Painter\resources\starter_assets\smart-materials 放入之后就会自动刷新

网络原理----TCP/IP(3)

核心机制七----延时应答 默认情况下&#xff0c;接收方都是在收到数据报的第一时间&#xff0c;就返回ack&#xff0c;但是可以通过延时返回ack的方式来提高效率&#xff0c;理论上不是100%提高效率&#xff0c;但还是有一定帮助的。 因为如果接收数据的主机⽴刻返回ACK应答,…

MacBook Pro使用FFmpeg捕获摄像头与麦克风推流音视频

FFmpeg查看macos系统音视频设备列表 ffmpeg -f avfoundation -list_devices true -i "" 使用摄像头及麦克风同时推送音频及视频流: ffmpeg -f avfoundation -pixel_format yuyv422 -framerate 30 -i "0:1" -c:v libx264 -preset ultrafast -b:v 1000k -…

部署Joplin私有云服务器postgres版-docker compose

我曾经使用过一段时间 Joplin&#xff0c;官方版本是收费的&#xff0c;而我更倾向于将数据掌握在自己手中。因此&#xff0c;在多次权衡后&#xff0c;我决定自己搭建 Joplin 服务器并进行尝试。 个人搭建的版本与数据库直连&#xff0c;下面是使用 Docker Compose 配置数据库…

SQL的select语句完整的执行顺序

SQL的SELECT语句的执行顺序可以用"做菜流程"来类比理解。虽然我们写SQL时按SELECT…FROM…WHERE…顺序写&#xff0c;但数据库执行顺序完全不同。以下是通俗易懂的讲解&#xff08;附流程图和示例&#xff09;&#xff1a; &#x1f527; 执行顺序流程图&#xff1a…

Spring Cloud LoadBalancer详解

一、介绍 Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现,用来替代Ribbon(已经停更), 二、Ribbon和Loadbalance 对比 组件组件提供的负载策略支持负载的客户端Ribbon随机 RandomRule轮询 RoundRobinRule 重试 RetryRule最低并发 Bes…