https://www.cnblogs.com/qianxiaoruofeng/p/15659264.html
消息队列是计算机中不可或缺的一个重要角色,用好mq 能给我们的工作减少更多的工作量,提高办公的效率。
什么是mqtt ,先了解一下。
https://mqtt.org/
https://www.emqx.com/zh
下载服务端程序、和客户端的程序
serve 端,今天我们用的是windows版本的mosquitto试验
https://mosquitto.org/download/
你也可以选择emqx作为更多的集成支持的mqtt
https://www.emqx.com/zh/try?product=broker
安装 mqtt server 必须以管理员身份安装,否者后面没法使用启动不成功。
上图是mosquitto 安装成功后目录结构
目录下面有几个安装阅读的文件,你一看便知文件的作用
配置mqtt
mqtt 支持默认不配置可以启动,但是生产中不安全,存在数据泄露的风险,所以我们就讲一下他的配置。
我们就在这里讲最低的一个账户密码配置,不让所有人都能登录。
在mosquitto.conf配置文件 设置不允许任何人登录,且设置登录用户和指定密码文件还要设置权限acl文件
allow_anonymous允许匿名
password_file密码文件
acl_file访问控制列表
allow_anonymous false
password_file C:/Program Files/mosquitto/pwfile.example
user mac
acl_file C:/Program Files/mosquitto/acl
在pwfile 中添加用户,
指令如下:
#mosquitto_passwd -c pwfile mac
你要输入你电脑的账号密码,否者这个borker设备无法登录。
输入两次之后正常显示之后,说明你的用户配置正确
密码文件里面就多出这样一行。
acl 文件是这样的。
然后通过配置文件启动mqttserver
mosquitto -c mosquitto.conf
这样启动mqttserver
这里可能会多次权限不够什么的,你就要主义配置文件是否正确了。
也可以直接点击exe启动不带参数启动,那样不安全,很多时候会出现闪退,你要注意。
下面是设置mqtt 订阅,
用的是这个程序
#mosquitto_sub -h 192.168.1.100 -t mtopic -u username -P passwd
下面是设置mqtt 发布,
#mosquitto_pub -h 192.168.1.100 -t mtopic -u username -P passwd -m "test"
我们来mqtt 工具里面来设置一下,做订阅和发布的事情,it's creazy 。
这里要保持客户端id不一样,否者这个本机一台机器就会一个上线,一个下线互相抢断。
关于topic 设置
一个客户端订阅,一个客户端发布,就可以看到,消息流的产生了。
还要注意一个topic 设置的格式。
(1)主题层级分隔符 / : 用于分割主题层级,/分割后的主题,这是消息主题层级设计中很重要的符号。 比方说: aaa/bbb和 aaa/bbb/ccc 和aaa/bbb/ccc/ddd ,这样的消息主题格式,是一个层层递进的关系,可通过多层通配符同时匹配两者,或者单层通配符只匹配一个。 这在现实场景中,可以应用到:公司的部门层级推送、国家城市层级推送等包含层级关系的场景。
(2) 单层通配符 +: 单层通配符只能匹配一层主题。比如: aaa/+ 可以匹配 aaa/bbb ,但是不能匹配aaa/bbb/ccc。 单独的+号可以匹配单层的所有推送;
(3) 多层通配符 #: 多层通配符可以匹配于多层主题。比如: aaa/# 不但可以匹配aaa/bbb,还可以匹配aaa/bbb/ccc/ddd。 也就是说,多层通配符可以匹配符合通配符之前主题层级的所有子集主题。单独的#匹配所有的消息主题.
注: 单层通配符和多层通配符只能用于订阅(subscribe)消息而不能用于发布(publish)消息,层级分隔符两种情况下均可使用。
你们都知道mqtt协议最基本的思想就是发布订阅,也就是一个设备发布多个设备订阅。
设备发布者发布一个主题,其它设备经过订阅能够得到主题发布者发送的消息。
网关做为发布者发布两个主题:
通配:dev/用户ID/公司ID/项目ID/设备MAC/#
主题一:dev/用户ID/公司ID/项目ID/设备MAC/0
该主题为设备订阅的主题,用来发送设备信息给用户,只能为指定设备发布
主题二:dev/用户ID/公司ID/项目ID/设备MAC/1
该主题为设备订阅的主题,用户用来发送信息给设备,该主题任何用户可发布消息
这里的 “设备MAC” 地址是惟一的。web
设备运行后,首先,订阅主题二
而后:
利用主题一,定时发布消息。
利用主题二,不断的接收消息。svg
用户运行后,首先,订阅主题一
而后利用主题一,接收设备发送的消息。
利用主题二,发送控制信息。xm
参考文档:
https://mosquitto.org/documentation/
https://www.cnblogs.com/saryli/p/9818721.html
https://www.jianshu.com/p/d96239675831
https://www.shangmayuan.com/a/59eb0278bba241878c28fbf6.html