Message Queue
MQTT,Message Queuing Telemetry Transport,即消息队列遥测传输,是一种基于发布/订阅范式的“轻量级”消息协议。
MQTT的特点如下:
- MQTT是一种发布/订阅传输协议
- 使用 TCP/IP 提供网络连接,提供有序、无损、双向连接
- 对负载内容屏蔽的消息传输
- 具体有三种消息发布的服务质量,包括至多一次、至少一次、只有一次
- 小型传输,开销小,固定长度的头部是 2 字节,协议交换最小化,以降低网络流量
- 使用Last Will和Testament特性通知有关各方客户端异常中断的机制
EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。Erlang/OTP 是出色的软实时(Soft-Realtime)、低延时(Low-Latency)、分布式(Distributed) 的语言平台。MQTT 是轻量的(Lightweight)、发布订阅模式(PubSub) 的物联网消息协议。
安装MQTT
下载Window安装包,安装过程中可能遇到msvcr120.dll 找不到,造成MQTT无法安装,需要先安装VC的运行环境。
安装Visual Studio 2013 的 Visual C++ 可轉散發套件
修改EMQX的监听端口
打开emqx\etc\emqx.conf
## MQTT/TCP - External TCP Listener for MQTT Protocol
## listener.tcp.$name is the IP address and port that the MQTT/TCP
## listener will bind.
##
## Value: IP:Port | Port
##
## Examples: 1883, 127.0.0.1:1883, ::1:1883
listener.tcp.external = 0.0.0.0:1883
启动
D:\emqx\bin> emqx start
停止
D:\emqx\bin> emqx stop
重启
D:\emqx\bin>emqx restart
ok
管理
通过浏览器访问Emqx管理界面
http://127.0.0.1:18083/
用户名:admin
密码:public
emqx_ctl status检查运行状态
D:\emqx\bin>emqx_ctl status
Node 'emqx@127.0.0.1' 4.3.5 is started
Release as a windows 服务
通过emqx.cmd 命令把EMQX注册成为windows服务。
:: This batch file handles managing an Erlang node as a Windows service.
::
:: Commands provided:
::
:: * install - install the release as a Windows service
:: * start - start the service and Erlang node
:: * stop - stop the service and Erlang node
:: * restart - run the stop command and start command
:: * uninstall - uninstall the service and kill a running node
:: * ping - check if the node is running
:: * console - start the Erlang release in a `werl` Windows shell
:: * attach - connect to a running node and open an interactive console
:: * list - display a listing of installed Erlang services
:: * usage - display available commands
D:\emqx-windows-4.3.5\emqx\bin>emqx.cmd install
D:\emqx-windows-4.3.5\emqx\erts-11.0\bin\erlsrv.exe: Service emqx_4.3.5 added to system.
[SC] ChangeServiceConfig 成功
服务卸载
emqx uninstall
Websocket客户端连接
websocket默认端口8083,与管理界面的接口18083不同。
发布 && 订阅
订阅过多,容易造成管理界面瘫痪。
MQTT的配置文件
EMQ X Broker 提供了匿名访问,允许客户端不需要用户名与密码就能连接 Broker,通常在用户的生产环境中,此功能被默认关闭,但用户可以在他的内网环境中启用此功能。
Listener
Listener 主要用于配置不同协议的监听端口和相关参数,EMQ X Broker 支持配置多个 Listener 以同时监听多个协议或端口。
EMQ X Broker 默认提供 5 个 Listener,它们将占用以下端口:
-端口- -说明-
1883-------------MQTT/TCP 协议端口
11883------------MQTT/TCP 协议内部端口,仅用于本机客户端连接
8883-------------MQTT/SSL 协议端口
8083-------------MQTT/WS 协议端口
8084-------------MQTT/WSS 协议端口
Listener 配置项的命名规则为 listener...xxx, 即 Listener 使用的协议,目前支持 tcp, ssl, ws, wss。 可以随意命名,但建议是全小写的英文单词,xxx 则是具体的配置项。不同协议的 Listener 的 可以重复,listener.tcp.external 与 listener.ssl.external 是两个不同的 Listener。
由于默认配置的存在,我们能够非常快速地展示如何添加新的 Listener,以 TCP Listener 为例,我们只需要在 emqx.conf 中添加以下一条配置即可:
listener.tcp.example = 12345
Zone
一个 Zone 定义了一组配置项 (比如最大连接数等),Listener 可以通过配置项 listener...zone 指定使用某个 Zone,以使用该 Zone 下的所有配置。多个 Listener 可以共享同一个 Zone。Zone 的命名规则为 zone..xxx,Zone Name 可以随意命名,但同样建议是全小写的英文单词,xxx 是具体的配置项。
此时,我们的每个配置项都存在三个可用值,分别是全局的值,Zone 里设置的值以及默认值,它们的优先级顺序为:Zone > Global > Default