JAVA版开源MQTT Broker, 支持集群和规则引擎
MMQ broker
MMQ broker 是一款完全开源,高度可伸缩,高可用的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序。
MMQ broker 完整支持MQTT V3.1 和 V3.1.1。
Github: https://github.com/MrHKing/mmqtt
Gitee: https://gitee.com/paperman/mmq
安装
MMQ broker 是跨平台的,支持 Linux、Unix、macOS 以及 Windows。这意味着 MMQ broker 可以部署在 x86_64 架构的服务器上。由于使用raft一致性算法,集群部署三个节点以上。
从 Github 上下载源码方式
git clone https://github.com/MrHKing/mmq.git
cd mmq
mvn -Prelease-mmq -Dmaven.test.skip=true clean install -U
复制代码
直接安装
您可以从 最新稳定版本 下载 mmq-server-$version.zip 包。
unzip mmq-server-$version.zip 或者 tar -xvf mmq-server-$version.tar.gz
cd mmq/bin
复制代码
Docker安装
docker run -d --name mmq -p 2883:2883 -p 1883:3883 -p 8888:8888 paperman/mmq:v1.0.8
复制代码
Kubernetes安装
快速入门
单机版启动
cd mmq\bin
#windows start
startup.cmd -m standalone
复制代码
cd mmq/bin
#linux start
sh startup.sh -m standalone
#linux shutdown
sh shutdown.sh
复制代码
集群版启动
cd mmq/config
#配置集群文件
cp cluster.conf.example cluster.conf
复制代码
#每个节点都需要配置其他节点的地址,如下:
#example
192.168.31.9:7777
192.168.31.9:8848
192.168.31.9:8888
复制代码
cd mmq\bin
#windows start
startup.cmd
复制代码
cd mmq/bin
#linux start
sh startup.sh
#linux shutdown
sh shutdown.sh
复制代码
配置文件
mqtt tcp端口默认:3883
mqtt websocket端口:2883
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/
### Default web server port:
server.port=8888#*************** mqtt broker Configurations ***************#
mmq.broker.websocketPort=2883
mmq.broker.port=3883
mmq.broker.default.user=admin
mmq.broker.default.password=admin@mmq
mmq.broker.default.anonymous=true
复制代码
10万客户端压力测试
- 10万连接
- 两节点集群
- 测试工具xmeter
服务器资源
- 服务端资源:两台4核8G服务器
- 客户端资源:三台8核16G模拟测试服务器
测试结果
- 10万连接,一分钟发送一次数据。
- 平均吞吐量:1302。成功率:100%
- 服务器使用资源:CPU 10%, 内存6%
- 平均响应时间:0.0158秒
规则引擎
通过SQL进行规则转发
- 选择发布到topic/#的消息,然后选择所有字段:
SELECT * FROM "topic/#"
复制代码
- 查询专门字段SQL
SELECT this.payload.value, this.payload.deviceName FROM "topic/#"
复制代码
- 条件查询SQL
SELECT this.payload.value, this.payload.deviceName FROM "topic/#" WHERE this.payload.deviceName like 'abc%'
复制代码
- 滚动窗口
- 滑动窗口
- 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/... |
INSERT INTO test (uuid, date, datetime, utc, timestamp, topic, name) VALUES ('#{[uuid]}',#{[date]},#{[datetime]},#{[utc]},#{[timestamp]},#{[topic]},#{[topic1]})
复制代码
kafka资源桥接
- 添加kafka资源
- 添加规则引擎
SELECT * FROM "topic/#"
复制代码
- 测试
- Topic: topic/test
- MQTT 客户端上传 Json Demo 如下:
{"msg": {"name": "test","value": "12321"}
}
复制代码
- 插入结果
{"address":"","qos":0,"payload":{"msg":{"name":"test","value":"12321"}},"topic":"topic/test"}
复制代码
Mysql资源桥接
MQTT 客户端上传 Json Demo 如下:
{"msg": {"name": "test","value": "12321"}
}
复制代码
规则SQL Demo:
SELECT * FROM "topic/#"
复制代码
Mysql SQL Demo如下:
INSERT INTO history (name, value) VALUES ('#{[msg][name]}',#{[msg][value]})
复制代码
SqlServer资源桥接
MQTT 客户端上传 Json Demo 如下:
{"msg": {"name": "test","value": "12321"}
}
复制代码
规则SQL Demo:
SELECT * FROM "topic/#"
复制代码
Mysql SQL Demo如下:
INSERT INTO history (name, value) VALUES ('#{[msg][name]}',#{[msg][value]})
复制代码
postgresql资源桥接
MQTT 客户端上传 Json Demo 如下:
{"msg": {"name": "test","value": "12321"}
}
复制代码
规则SQL Demo:
SELECT * FROM "topic/#"
复制代码
Mysql SQL Demo如下:
INSERT INTO history (name, value) VALUES ('#{[msg][name]}',#{[msg][value]})
复制代码
认证方式
对外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 |
例子
$ curl -i --basic -u mmq:aaaaaa -X GET "http://localhost:8888/v1/api/clients?pageNo=1&pageSize=10"
{"code": 200,"message": null,"data": {"pageSize": 10,"pageNo": 1,"totalCount": 1,"totalPage": 0,"data": [{"clientId": "paho1640921025845000001","user": "e","connectTiem": "2022-01-20T01:02:39.903+00:00","address": "127.0.0.1","nodeIp": "192.168.0.113","nodePort": 8888}]}
}
复制代码
踢出客户端接口
GET /v1/api/rejectClient
通过客户端id,踢出客户端
查询参数
名称 | 类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
clientId | String | 否 | 无 | 客户端ID |
返回数据 | ||||
名称 | 类型 | 是否必填 | 默认值 | 说明 |
------ | ------ | ------ | ------ | ------ |
code | int | 是 | 无 | 200 |
message | int | 是 | 无 | 消息 |
$ curl -i --basic -u mmq:aaaaaa -X GET "http://localhost:8888/v1/api/rejectClient?clientId=paho1640921025845000001"
{"code": 200,"message": null,"data": null
}
复制代码
Dashboard --单机演示
启动后访问 http://101.43.4.211:8888/
默认账户:mmq
默认密码:aaaaaa
mqtt tcp端口默认:1883
mqtt websocket端口:2883
MQTT 规范
你可以通过以下链接了解与查阅 MQTT 协议:
MQTT Version 3.1.1
开源许可
Apache License 2.0, 详见 LICENSE。
群号
QQ群: 1016132679
Github: https://github.com/MrHKing/mmqtt
Gitee: https://gitee.com/paperman/mmq
JAVA版开源MQTT Broker, 支持集群和规则引擎相关推荐
- 开源 MQTT Broker 对比
开源 MQTT Broker 对比 截止 2021 年,物联网行业里可选的MQTT Broker有很多,除了经典的Mosquitto和AWS.Azure,百度云.阿里云.IBM等几个提供物联网MQTT ...
- 微信跳一跳高分系列四:一个 JAVA 版开源的微信跳一跳辅助工具
基于前三篇文章,我们一起来制作一个自动化工具,解放劳动力,通过机器自动完成跳一跳 wechat-jump-helper 一款JAVA版开源的微信跳一跳小程序辅助工具 传送门一:wechat-jump- ...
- 推荐两款java版开源的MES制造执行系统源码,免费分享
分享两款开源免费的java版MES生产管理系统源码,非常不错的系统,值得学习参考. 需要源码学习请私信我. 1: 技术架构:springBoot+mybatis-plus+redis+shiro+hu ...
- Java版AVG游戏开发入门示例 3 ——脚本引擎的制作及应用
源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...
- Java版AVG游戏开发入门示例[3]——脚本引擎的制作及应用
源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...
- JAVA版开源微信管家—JeeWx捷微3.1小程序版本发布,支持微信公众号,微信企业号,支付窗
支持小程序,JeeWx捷微3.1小程序版本发布^_^ JeeWx捷微V3.1--多触点小程序版本管理平台(支持微信公众号,微信企业号,支付窗) JeeWx捷微V3.1.0版本紧跟微信小程序更新,在原有 ...
- java版开源工作流引擎ccflow从表数据数据源导入设置
为什么80%的码农都做不了架构师?>>> 关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow .net开源工作流 从表数据导入设置 概要说明 ...
- Java版开源的端口映射工具
What is holer Holer exposes local servers behind NATs and firewalls to the public internet over secu ...
- Java版开源工作流Jflow从表数据数据源导入设置
驰骋工作流从表数据数据源导入设置 关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow .net开源工作流 从表数据导入设置 概要说明 在从表 ...
- MQTT Broker 比较与选型
开源 MQTT Broker 对比 截止 2020,物联网行业里可选的MQTT Broker有很多,除了经典的Mosquitto和AWS.Azure,百度云.阿里云.IBM等几个提供物联网MQTT接入 ...
最新文章
- 知乎用户行为预测数据比赛,10万奖金等你来Battle!
- python xlutils教程_Python基于xlutils修改表格内容过程解析
- [剑指offer]面试题第[37]题[Leedcode][JAVA][第297题][二叉树列的序列化与反序列化][递归][BFS]
- python对操作系统要求_python之--并发编程__操作系统
- 马云:未来10年,人类将面临AI、IoT和区块链3大挑战!(视频+全文)
- python replace替换多个字符_关于python:使用string.replace(x,y)替换所有
- Duplicate interface definition for class解决方法
- 模型与高性能服务器结合,Epoll模型的高性能服务器丢失数据问题解决
- PHP常用系统设置整理
- 离散数学课后习题答案 左孝凌版
- 用Java写一个小游戏
- 全源最短路 Johnson算法
- 三星s8android9,三星S8官方国行版安卓9固件rom刷机包:CHC-G9500ZCS3DSD5
- 【原创】STM32低功耗模式及中断唤醒(基于BMI160及RTC)的研究
- 在Vue项目中使用阿里巴巴矢量图
- 被马斯克热炒的人形机器人Optimus“擎天柱“,中国厂商或后来居上
- linux系统修改屏幕分辨率6,Linux系统怎么更改屏幕分辨率
- TIM腾讯聊天(即时通信 IM)(咨询客服业务)
- wifi底层学习之路:二,无线配置管理服务cfg80211
- 你真的会用三目运算符吗?
热门文章
- php 0xc0000135,php 错误代码 0xc0000135是什么情况
- Wireshark抓包分析WLAN连接过程
- C语言工程网络图,三分钟教你学会 双代号网络图的绘制
- 第10章 数据库运行维护与优化
- 计算机连接苹果手机不能找到照片目录,苹果手机上照片在电脑找不到了怎么办...
- 怎么把html导入iphone,电脑上的视频怎么导入iphone8?电脑视频导入苹果手机教程...
- 鸿蒙系统反应慢,系统优化非常的关键 鸿蒙2.0和iOS14的反应速度测试
- 二代神经计算棒NCS2+YOLOv3+ROS加速目标检测
- 杭州地铁行业十四五发展可行性及投资机遇研究报告2022版
- K650c + Ubuntu 15.04无法正常关机,重启