概述
EMQ X Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT
消息服务器。EMQ X Broker 在全球物联网市场广泛应用。无论是产品原型设计、物联网创业公司、还是大规模的商业部署,
EMQ X Broker 都支持开源免费使用。
环境
系统:CentOS 8 64位
EMQ:emqx-centos7-v4.0.0.zip
安装
下载地址
https://www.emqx.io/cn/downloads#broker.
window/Linux 都可以直接下载压缩包解压就可以了,下面附上 Linux 安装方法
选择合适的版本号以及软件包
下载并解压,没有 unzip 解压工具的使用 yum -y install unzip 命令安装
wget https://www.emqx.io/cn/downloads/broker/v4.0.0/emqx-centos7-v4.0.0.zip
unzip emqx-centos7-v4.0.0.zip
EMQ 服务器常用命令
winodw CMD 使用如下命令,Linux 使用 ./emqx start,window PowerShell 使用 .\emqx start
emqx start
后台启动 EMQ X Broker;
emqx stop
关闭 EMQ X Broker;
emqx restart
重启 EMQ X Broker;
emqx console
使用控制台启动 EMQ X Broker;
emqx foreground
使用控制台启动 EMQ X Broker,与 emqx console 不同,emqx foreground 不支持输入 Erlang 命令;
emqx ping
Ping EMQ X Broker。
启动 EMQ 服务器,访问 web 管理界面 Dashboard
EMQ X 默认提供 5 个 Listener,它们将占用以下端口:
端口 | 说明 |
---|---|
1883 | MQTT/TCP 协议端口 |
11883 | MQTT/TCP 协议内部端口,仅用于本机客户端连接 |
8883 | MQTT/SSL 协议端口 |
8083 | MQTT/WS 协议端口 |
8084 | MQTT/WSS 协议端口 |
进入 emqx 的 /bin 目录, ./emqx start 启动,如下图,(如果不能启动,则安装openssl,运行命令yum install -y openssl)
本地安装访问 http://localhost:18083/,账户名 admin, 密码 public,如果是阿里云服务器,则开
通 18083 和 1883 端口(1883 端口后续代码使用),结果如下,可设置中文显示
可以访问成功说明 EMQ 服务器安装成功
实现简单的订阅发布
在服务器,新建一个 pubMsg.js,复制如下代码
let mqtt = require('mqtt')
let i = 0
let client = mqtt.connect('tcp://39.99.222.146:1883')
// 统计定时任务运行时长
console.time('test')
client.on('connect', func)
function func() {
const interval = setInterval(() => {
client.publish('testtopic', '第 ' + i + '条消息', {'qos': 0}, function (err) {
i++
if (i === 100000) {
console.log('---------------------------发送---------------------- ' + i + '条消息');
// 停止定时任务
clearInterval(interval)
console.timeEnd('test')
}
})
})
}
在本地新建一个 subMsg.js 文件,复制如下内容
let mqtt = require('mqtt')
let j = 0;
let client = mqtt.connect('tcp://39.99.222.146:1883')
client.on('connect', function () {
client.subscribe('testtopic', {'qos':0}, function (err) {
if(err){
console.error("连接 tcp://39.99.222.146:1883 mqtt服务失败")
return;
}
console.log("成功连接到 tcp://39.99.222.146:1883 mqtt服务")
})
})
client.on('message', function (topic, message) {
// message is Buffer
j++;
console.log(message.toString() + '-----------接收第' + j + '条消息')
})
使用 npm 安装 mqtt 包 npm install mqtt,运行程序 node pubMsg.js , node subMsg.js
①、一个 发布消息的客户端 QOS = 0,一个订阅客户端 QOS = 0
结果如下,发送 100000 条 QOS = 0 的消息,接收数据质量 QOS = 0 仍然为100000 条
pubMsg.js
subMsg.js
②、一个发布消息客户端 QOS = 0,五个订阅客户端 QOS = 0
结果如下,发送 100000 条 QOS = 0 的消息,接收数据质量 QOS = 0 没有一个订阅客户端为100000,各有不同程度丢失消
息,不过也属于正常情况,上面那个能全部接收才觉得不正常😂,该没有对消息重复消费做处理,后续会考虑
③、一个发布消息客户端 QOS = 2,多个订阅客户端 消息质量都为 QOS = 2,不会有消息丢失