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.pswp.cn/bicheng/72373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72373.shtml
英文地址,請注明出處:http://en.pswp.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…