一. 集群搭建 參照這里
二. 開啟MQTT插件
每臺服務(wù)都需要進(jìn)入rabbitmq控制臺, 執(zhí)行下面命令
// 開啟mqtt支持
rabbitmq-plugins enable rabbitmq_mqtt
rabbitmq-plugins enable rabbitmq_web_mqtt
// 開啟web管理端支持(這一步一般在集群搭建前都設(shè)置成了)
rabbitmq-plugins enable rabbitmq_management
路徑: D:\A1_application\Rabbitmq\rabbitmq_server-3.12.11\sbin>, 要以管理員身份運(yùn)行
三. 配置MQTT協(xié)議的Nginx代理, 參照這里
四. 設(shè)置鏡像策略
為配合鏡像隊列使用, 客戶端連接需要設(shè)置 WithCleanSession(false), 并且以Qo1的策略訂閱
C#客戶端代碼 參照這里
- 進(jìn)入任意一臺服務(wù)管理界面選擇Admin > Policies, 創(chuàng)建User Policies
- Name: ha-all (隨便起)
- Pattern: ^ (匹配哪些對象, ^ 匹配所有, 其他寫法自己查閱官方文檔)
- Apply to: Exchanges and queues (應(yīng)用到哪些對象)
- Definition:
- ha-mode:all (指明鏡像隊列的模式, 有效值為 all/exactly/nodes)
-
ha-sync-mode:automatic (進(jìn)行隊列中消息的同步方式助琐,有效值為automatic和manual)
- 填寫完成點擊提交, 策略會自動同步到其他節(jié)點
-
這時候進(jìn)入交換機(jī)和隊列界面, 會看到交換機(jī)或隊列表格 Features 列都有個 ha-all, Node列后面有個 +2
ha-all意味著當(dāng)前交換機(jī)或者隊列數(shù)據(jù)都會復(fù)制到集群的其他服務(wù)上, 其中一臺掛了或者網(wǎng)絡(luò)斷了, 客戶端連上其他服務(wù)節(jié)點可以繼續(xù)消費, 數(shù)據(jù)不會丟失
+2 意味著數(shù)據(jù)會被復(fù)制到其他幾臺服務(wù)上, 數(shù)字取決于在線集群的服務(wù)數(shù)量
開啟鏡像模式意味著RabbitMQ服務(wù)開銷增大, 因為任何一條消息都需要復(fù)制到其他服務(wù)上, 集群越大, 開銷越大. 可以通過調(diào)整第1步策略設(shè)置消息的復(fù)制范圍.
五. 添加配置文件
- 進(jìn)入安裝目錄\rabbitmq_server-3.12.11\etc, 創(chuàng)建rabbitmq.conf, 配置內(nèi)容如下:
# 設(shè)置queue類型
# mqtt.durable_queue_type = quorum
# 設(shè)置默認(rèn)監(jiān)聽端口
# mqtt.listeners.tcp.default = 1883
# 設(shè)置vhost
# mqtt.vhost = /
# 設(shè)置交換機(jī)
# mqtt.exchange = amq.topic
# 是否允許匿名訪問
# mqtt.allow_anonymous = true
# 默認(rèn)用戶名密碼
# mqtt.default_user = guest
# mqtt.default_pass = guest
# ...
# 以上配置按需開啟, 不知道怎么用就不要開啟, 全部使用默認(rèn)
- 把配置文件路勁配到系統(tǒng)環(huán)境變量, 告訴RabbitMQ去讀取我們上一步添加的配置文件
變量名: RABBITMQ_CONFIG_FILE
變量值: D:\A1_application\Rabbitmq\rabbitmq_server-3.12.11\etc\rabbitmq