从rabbitmq 3.8开始.rabbitmq已经包含了mqtt插件,但是默认不启动.
进入rabbitmq主机执行 rabbitmq-plugins enable rabbitmq_mqtt:
root@50f42796527f:/# rabbitmq-plugins enable rabbitmq_mqtt
Enabling plugins on node rabbit@50f42796527f:
rabbitmq_mqtt
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_mqtt
rabbitmq_prometheus
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@50f42796527f...
The following plugins have been enabled:
rabbitmq_mqtt
started 1 plugins.
此时启动了,注意mqtt默认启动1883端口.此时主机应该要对外开放1883端口.
需要注意的是:
- 从3.8版本开始,该插件要求存在一定数量的群集节点。这意味着三分之二,五分之三,依此类推。
该插件也可以在单个节点上使用,但不支持两个节点的集群。
如果大多数群集节点都关闭,则其余群集节点将无法接受新的MQTT客户端连接。 - 应当额外创建与mqtt相关的账户,下面命令创建了mqtt-test/123456.并且赋予虚拟机/ 且权限是***,并且赋予management的角色
# username and password are both "mqtt-test"
rabbitmqctl add_user mqtt-test 123456
rabbitmqctl set_permissions -p / mqtt-test ".*" ".*" ".*"
rabbitmqctl set_user_tags mqtt-test management
- rabbitmq的mqtt插件的topic的原理是:
默认topic交换机:amq.topic
每消费者对应每一个queue,消息来后,循环发放到所有的queue,下图有3个消费者