JAVA版开源MQTT Broker, 支持集群和规则引擎
MMQ broker
MMQ broker 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序。
MMQ broker 完整支持MQTT V3.1 和 V3.1.1。
Github:
Gitee:
安装
MMQ broker 是跨平台的,支持 Linux、Unix、macOS 以及 Windows。这意味着 MMQ broker 可以部署在 x86_64 架构的服务器上。由于使用raft一致性算法,集群部署三个节点以上。
从 Github 上下载源码方式
直接安装
您可以从 最新稳定版本 下载 mmq-server-$version.zip 包。
Docker安装
Kubernetes安装
快速入门
单机版启动
集群版启动
配置文件
mqtt tcp端口默认:3883
mqtt websocket端口:2883
10万客户端压力测试
- 10万连接
- 两节点集群
- 测试工具xmeter
服务器资源
- 服务端资源:两台4核8G服务器
- 客户端资源:三台8核16G模拟测试服务器
测试结果
- 10万连接,一分钟发送一次数据。
- 平均吞吐量:1302。成功率:100%
- 服务器使用资源:CPU 10%, 内存6%
- 平均响应时间:0.0158秒
规则引擎
通过SQL进行规则转发
- 选择发布到topic/#的消息,然后选择所有字段:
- 查询专门字段SQL
- 条件查询SQL
- 滚动窗口
- 滑动窗口
- MySql\Sqlserver\Postgresql\Tdengine 插入数据库模板通用字段
属性 | 说明 |
---|---|
uuid | uuid字符串 |
date | yyyy-MM-dd格式日期 |
datetime | yyyy-MM-dd HH:mm:ss格式日期 |
utc | yyyy-MM-dd'T'HH:mm:ssZ格式日期 |
timestamp | long 格式日期 |
username | 发送消息的账户 |
topic | 发送topic |
topic[no] | 例:/topic1/topic2/topic3/... |
kafka资源桥接
- 添加kafka资源
- 添加规则引擎
- 测试
- Topic: topic/test
- MQTT 客户端上传 Json Demo 如下:
- 插入结果
Mysql资源桥接
MQTT 客户端上传 Json Demo 如下:
规则SQL Demo:
Mysql SQL Demo如下:
SqlServer资源桥接
MQTT 客户端上传 Json Demo 如下:
规则SQL Demo:
Mysql SQL Demo如下:
postgresql资源桥接
MQTT 客户端上传 Json Demo 如下:
规则SQL Demo:
Mysql SQL Demo如下:
认证方式
对外API接口,HTTP API 使用 Basic 认证 (opens new window)方式,id 和 password 须分别填写 AppID 和 AppSecret。 默认的 AppID 和 AppSecret 是:mmq/aaaaaa。使用需要在【模块】菜单中找到HTTP API模块,启用即可,如需修改 AppID 和 AppSecret,点击编辑修改即可。
返回响应码
响应码 | 说明 |
---|---|
102 | 未知错误 |
200 | 正常 |
401 | 没有权限 |
获得在线客户端接口
GET /v1/api/clients
返回集群下所有客户端的信息,支持分页
查询参数
名称 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
pageNo | int | 是 | 无 | 页码 |
pageSize | int | 是 | 无 | 数据条数 |
clientId | String | 否 | 无 | 客户端ID |
address | String | 否 | 无 | 客户端IP |
user | String | 否 | 无 | 客户端账户 |
topic | String | 否 | 无 | 客户端订阅的Topic,用于like查询订阅此Topic的客户端 |
返回数据 | ||||
名称 | 类型 | 是否必填 | 默认值 | 说明 |
------ | ------ | ------ | ------ | ------ |
code | int | 是 | 无 | 200 |
message | int | 是 | 无 | 消息 |
data | Array of Objects | 是 | 所有客户端信息 | |
pageNo | int | 是 | 无 | 页码 |
pageSize | int | 是 | 无 | 数据条数 |
totalCount | int | 是 | 无 | 数据总数 |
totalPage | int | 是 | 无 | 数据总页 |
data[0].clientId | String | 是 | 无 | 客户端ID |
data[0].address | String | 否 | 无 | 客户端IP |
data[0].user | String | 否 | 无 | 客户端账户 |
data[0].nodeIp | String | 否 | 无 | 客户端所在节点IP |
例子
踢出客户端接口
GET /v1/api/rejectClient
通过客户端id,踢出客户端
查询参数
名称 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
clientId | String | 否 | 无 | 客户端ID |
返回数据 | ||||
名称 | 类型 | 是否必填 | 默认值 | 说明 |
------ | ------ | ------ | ------ | ------ |
code | int | 是 | 无 | 200 |
message | int | 是 | 无 | 消息 |
Dashboard --单机演示
启动后访问
默认账户:mmq
默认密码:aaaaaa
mqtt tcp端口默认:1883
mqtt websocket端口:2883
MQTT 规范
你可以通过以下链接了解与查阅 MQTT 协议:
开源许可
Apache License 2.0, 详见
群号
QQ群: 1016132679
Github:
Gitee: