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资源桥接

  1. 添加kafka资源
  2. 添加规则引擎
SELECT * FROM "topic/#"
复制代码
  1. 测试
  • Topic: topic/test
  • MQTT 客户端上传 Json Demo 如下:
{"msg": {"name": "test","value": "12321"}
}
复制代码
  1. 插入结果
{"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, 支持集群和规则引擎相关推荐

  1. 开源 MQTT Broker 对比

    开源 MQTT Broker 对比 截止 2021 年,物联网行业里可选的MQTT Broker有很多,除了经典的Mosquitto和AWS.Azure,百度云.阿里云.IBM等几个提供物联网MQTT ...

  2. 微信跳一跳高分系列四:一个 JAVA 版开源的微信跳一跳辅助工具

    基于前三篇文章,我们一起来制作一个自动化工具,解放劳动力,通过机器自动完成跳一跳 wechat-jump-helper 一款JAVA版开源的微信跳一跳小程序辅助工具 传送门一:wechat-jump- ...

  3. 推荐两款java版开源的MES制造执行系统源码,免费分享

    分享两款开源免费的java版MES生产管理系统源码,非常不错的系统,值得学习参考. 需要源码学习请私信我. 1: 技术架构:springBoot+mybatis-plus+redis+shiro+hu ...

  4. Java版AVG游戏开发入门示例 3 ——脚本引擎的制作及应用

    源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...

  5. Java版AVG游戏开发入门示例[3]——脚本引擎的制作及应用

    源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...

  6. JAVA版开源微信管家—JeeWx捷微3.1小程序版本发布,支持微信公众号,微信企业号,支付窗

    支持小程序,JeeWx捷微3.1小程序版本发布^_^ JeeWx捷微V3.1--多触点小程序版本管理平台(支持微信公众号,微信企业号,支付窗) JeeWx捷微V3.1.0版本紧跟微信小程序更新,在原有 ...

  7. java版开源工作流引擎ccflow从表数据数据源导入设置

    为什么80%的码农都做不了架构师?>>>    关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow  .net开源工作流 从表数据导入设置 概要说明 ...

  8. Java版开源的端口映射工具

    What is holer Holer exposes local servers behind NATs and firewalls to the public internet over secu ...

  9. Java版开源工作流Jflow从表数据数据源导入设置

    驰骋工作流从表数据数据源导入设置 关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow  .net开源工作流 从表数据导入设置             概要说明 在从表 ...

  10. MQTT Broker 比较与选型

    开源 MQTT Broker 对比 截止 2020,物联网行业里可选的MQTT Broker有很多,除了经典的Mosquitto和AWS.Azure,百度云.阿里云.IBM等几个提供物联网MQTT接入 ...

最新文章

  1. 知乎用户行为预测数据比赛,10万奖金等你来Battle!
  2. python xlutils教程_Python基于xlutils修改表格内容过程解析
  3. [剑指offer]面试题第[37]题[Leedcode][JAVA][第297题][二叉树列的序列化与反序列化][递归][BFS]
  4. python对操作系统要求_python之--并发编程__操作系统
  5. 马云:未来10年,人类将面临AI、IoT和区块链3大挑战!(视频+全文)
  6. python replace替换多个字符_关于python:使用string.replace(x,y)替换所有
  7. Duplicate interface definition for class解决方法
  8. 模型与高性能服务器结合,Epoll模型的高性能服务器丢失数据问题解决
  9. PHP常用系统设置整理
  10. 离散数学课后习题答案 左孝凌版
  11. 用Java写一个小游戏
  12. 全源最短路 Johnson算法
  13. 三星s8android9,三星S8官方国行版安卓9固件rom刷机包:CHC-G9500ZCS3DSD5
  14. 【原创】STM32低功耗模式及中断唤醒(基于BMI160及RTC)的研究
  15. 在Vue项目中使用阿里巴巴矢量图
  16. 被马斯克热炒的人形机器人Optimus“擎天柱“,中国厂商或后来居上
  17. linux系统修改屏幕分辨率6,Linux系统怎么更改屏幕分辨率
  18. TIM腾讯聊天(即时通信 IM)(咨询客服业务)
  19. wifi底层学习之路:二,无线配置管理服务cfg80211
  20. 你真的会用三目运算符吗?

热门文章

  1. php 0xc0000135,php 错误代码 0xc0000135是什么情况
  2. Wireshark抓包分析WLAN连接过程
  3. C语言工程网络图,三分钟教你学会 双代号网络图的绘制
  4. 第10章 数据库运行维护与优化
  5. 计算机连接苹果手机不能找到照片目录,苹果手机上照片在电脑找不到了怎么办...
  6. 怎么把html导入iphone,电脑上的视频怎么导入iphone8?电脑视频导入苹果手机教程...
  7. 鸿蒙系统反应慢,系统优化非常的关键 鸿蒙2.0和iOS14的反应速度测试
  8. 二代神经计算棒NCS2+YOLOv3+ROS加速目标检测
  9. 杭州地铁行业十四五发展可行性及投资机遇研究报告2022版
  10. K650c + Ubuntu 15.04无法正常关机,重启