使用Rabbitmq作为MQTT Broker搭建高可用集群方案
2024-01-26 本文已影响0人
Messix_1102
一. 集群搭建 参照这里
二. 开启MQTT插件
每台服务都需要进入rabbitmq控制台, 执行下面命令
// 开启mqtt支持
rabbitmq-plugins enable rabbitmq_mqtt
rabbitmq-plugins enable rabbitmq_web_mqtt
// 开启web管理端支持(这一步一般在集群搭建前都设置成了)
rabbitmq-plugins enable rabbitmq_management
路径: D:\A1_application\Rabbitmq\rabbitmq_server-3.12.11\sbin>, 要以管理员身份运行
三. 配置MQTT协议的Nginx代理, 参照这里
四. 设置镜像策略
为配合镜像队列使用, 客户端连接需要设置 WithCleanSession(false), 并且以Qo1的策略订阅
C#客户端代码 参照这里
- 进入任意一台服务管理界面选择Admin > Policies, 创建User Policies
- Name: ha-all (随便起)
- Pattern: ^ (匹配哪些对象, ^ 匹配所有, 其他写法自己查阅官方文档)
- Apply to: Exchanges and queues (应用到哪些对象)
- Definition:
- ha-mode:all (指明镜像队列的模式, 有效值为 all/exactly/nodes)
-
ha-sync-mode:automatic (进行队列中消息的同步方式,有效值为automatic和manual)
截图
- 填写完成点击提交, 策略会自动同步到其他节点
-
这时候进入交换机和队列界面, 会看到交换机或队列表格 Features 列都有个 ha-all, Node列后面有个 +2
截图
ha-all意味着当前交换机或者队列数据都会复制到集群的其他服务上, 其中一台挂了或者网络断了, 客户端连上其他服务节点可以继续消费, 数据不会丢失
+2 意味着数据会被复制到其他几台服务上, 数字取决于在线集群的服务数量
开启镜像模式意味着RabbitMQ服务开销增大, 因为任何一条消息都需要复制到其他服务上, 集群越大, 开销越大. 可以通过调整第1步策略设置消息的复制范围.
五. 添加配置文件
- 进入安装目录\rabbitmq_server-3.12.11\etc, 创建rabbitmq.conf, 配置内容如下:
# 设置queue类型
# mqtt.durable_queue_type = quorum
# 设置默认监听端口
# mqtt.listeners.tcp.default = 1883
# 设置vhost
# mqtt.vhost = /
# 设置交换机
# mqtt.exchange = amq.topic
# 是否允许匿名访问
# mqtt.allow_anonymous = true
# 默认用户名密码
# mqtt.default_user = guest
# mqtt.default_pass = guest
# ...
# 以上配置按需开启, 不知道怎么用就不要开启, 全部使用默认
- 把配置文件路劲配到系统环境变量, 告诉RabbitMQ去读取我们上一步添加的配置文件
变量名: RABBITMQ_CONFIG_FILE
变量值: D:\A1_application\Rabbitmq\rabbitmq_server-3.12.11\etc\rabbitmq