MqttWk 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
MqttWk 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
MqttWk 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
MqttWk 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
MqttWk 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

MqttWk

基于 nutzboot + netty或t-io + redis + kafka 实现的MQTT服务broker

本项目代码主要来源于 netty/t-io/iot-mqtt-server 等众多项目,开源免费,欢迎交流学习

参考项目

使用说明

软件架构说明

  1. 使用netty或t-io实现通信及协议解析

  2. 使用nutzboot提供依赖注入及属性配置

  3. 使用redis实现消息缓存,集群

  4. 使用kafka实现消息代理

项目结构

MqttWk
  ├── mqtt-codec -- MQTT协议解析的t-io实现
  ├── mqtt-auth -- MQTT服务连接时用户名和密码认证
  ├── mqtt-broker -- MQTT服务器功能的核心实现
  ├── mqtt-common -- 公共类及其他模块使用的服务接口及对象
  ├── mqtt-store -- MQTT服务器会话信息(redis缓存及kafka加载)
  ├── mqtt-zoo -- 教程文档或文件
    ├── mqtt-test-kafka -- kafka消费者接收消息
    ├── mqtt-test-websocket -- websocket通信测试示例

功能说明

  1. 参考MQTT3.1.1规范实现

  2. 完整的QoS服务质量等级实现

  3. 遗嘱消息, 保留消息及消息分发重试

  4. 心跳机制

  5. MQTT连接认证(可选择是否开启)

  6. SSL方式连接(可选择是否开启)

  7. 主题过滤(支持单主题订阅如 /mqtt/test --不可以/结尾, 通配符订阅 /mqtt/# --以/#结尾)

  8. Websocket支持(可选择是否开启)

  9. 集群功能(可选择是否开启)

  10. Kafka消息转发功能(可选择是否开启)

快速开始

  • 项目根目录执行 mvn install

  • mqtt-broker 下执行 mvn clean package nutzboot:shade 进行打包

  • java -jar mqtt-broker-xxx.jar -Dnutz.profiles.active=prod [此时加载application-prod.properties配置文件]

  • 打开mqtt-spy客户端, 填写相应配置下载

  • 连接端口:8885, websocket 端口: 9995 websocket

  • 连接使用的用户名: demo

  • 连接使用的密码: 8F3B8DE2FDC8BD3D792BE77EAC412010971765E5BDD6C499ADCEE840CE441BDEF17E30684BD95CA708F55022222CC6161D0D23C2DFCB12F8AC998F59E7213393

  • 连接使用的证书在 mqtt-zoo\keystore\server.cer

集群使用

  • 多机环境集群:

    • mqttwk.broker.cluster-on=true

    • mqttwk.broker.kafka.bootstrap.servers=192.168.1.101:9092,192.168.1.102:9093

    • redis.mode=cluster

    • redis.nodes=192.168.1.103:16379,192.168.1.104:26379

  • 单机环境集群:

    • mqttwk.broker.cluster-on=true

    • mqttwk.broker.kafka.bootstrap.servers=127.0.0.1:9092,127.0.0.1:9093

    • redis.mode=normal

    • redis.host=127.0.0.1

自定义 - 连接认证

  • 默认只是简单使用对用户名进行RSA密钥对加密生成密码, 连接认证时对密码进行解密和相应用户名进行匹配认证

  • 使用中如果需要实现连接数据库或其他方式进行连接认证, 只需要重写mqtt-auth模块下的相应方法即可

自定义 - 服务端证书

  • 服务端证书存储在mqtt-brokerresources/keystore/server.jks

  • 用户可以制作自己的证书, 但存储位置和文件名必须使用上述描述的位置及文件名

生产环境部署

  • 多机环境集群

  • 负载均衡: 富人用 L4 Switch,穷人用 Linux HAProxy

示例截图

示例截图

 

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (2)

加载中
支持下
2019/08/22 17:53
回复
举报
Wizzer软件作者
#NutzWk# #MqttWk# 好好学 天天向上
2018/08/08 15:00
回复
举报
先收藏下
2018/07/31 18:49
回复
举报
Wizzer软件作者
#MqttWk# 1.0.0-netty 版本发布了,见左边新闻~~~
2018/07/31 16:57
回复
举报
Wizzer软件作者
#MqttWk# 并发2.5万测试,passed2
2018/07/30 18:57
回复
举报
Wizzer软件作者
#MqttWk# 加了个netty分支
2018/07/27 18:54
回复
举报
Wizzer软件作者
#MqttWk# 谁来一起测bug?测压力?
2018/07/23 11:40
回复
举报
Wizzer软件作者
该评论暂时无法显示,详情咨询 QQ 群:912889742
Wizzer软件作者
#MqttWk# 欢迎试用~
2018/07/20 10:57
回复
举报
更多评论
发表于运维专区
2019/05/24 17:58

MqttWk 1.1.0-netty 发布,Java MQTT 服务及消息代理

1.1.0-netty 版更新内容: 完善集群模式,是否重复发送消息的判断更合理,修复有时发送失败的情况 完善MQTT Session存储及心跳处理机制 添加一套HTTP API,可对设备发送消息,可查询设备在线数量/设备名/订阅的主题等 项目介绍: MqttWk 是基于 nutzboot + netty + redis 实现的MQTT消息服务及消息代理,采用redis做缓存及集群实现,可启用kafka转发模式,将消息转发kafka处理,已用于生产,使用说明详见项目 README...

4
43
发表于软件架构专区
2018/08/10 10:28

MqttWk 1.0.3 发布,Java 物联网 MQTT 消息服务

基于 nutzboot + netty + redis + kafka 实现的MQTT消息服务(t-io版本预研中) 1.0.1-netty 至 1.0.3-netty更新内容: 完善QoS=1/2时messageId生成方法 完善协议解析的异常处理 完善ChannelGroup的缓存机制 序列化反序列化全部改为fastjson来实现 使用说明详见 README.md PS:本项目已在生产环境试用~...

2
20
发表于服务端专区
2018/07/31 16:05

MqttWk 1.0.0-netty 发布,Java MQTT服务及消息代理

MqttWk by netty 基于 nutzboot + netty + redis + kafka 实现的MQTT服务broker(另有t-io版本分支,暂未发布) 本项目代码主要来源于 netty/iot-mqtt-server 等众多项目,开源免费,欢迎交流学习 参考项目 https://github.com/netty/netty https://gitee.com/recallcode/iot-mqtt-server 使用说明 软件架构说明 使用netty实现通信及协议解析 使用nutzboot提供依赖注入及属性配置 使用redis实现消息缓存,集群 使用kafka实现消息...

4
22
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于开发技能专区
2020/05/17 15:36

Java使用easymqtt4j快速开发工业级mqtt企业级应用

Java使用easymqtt4j快速开发工业级mqtt企业级应用 easymqtt4j , netty +mqtt +subscriber+ publisher +broker+cluster server for java easymqtt4j特点: 1、spring integration 集成模式,自由灵活。 2、完全支持mqtt 3.1、3.1.1国际标准协议,支持tcp\websocket等等,可配置。 3、客户端完全支持接入主流broker服务如:Eclipse Paho,Mosquitto,JBoss A-MQ 6.1, Apache ActiveMQ 5.10-SNAPSHOT,Apache Camel 2.13.0,HiveMQ,...

1
0
2019/09/17 17:01

MQTT Broker 选型

broker的主要职责是接受发布者发布的所有消息,并将其过滤后分发给不同的消息订阅者。 如今有很多的broker,下面就是一张关于各种broker对比的图片: image 目前我用过的有mosquitto和emqttd(2.0版本后改叫EMQ),因为目前的需求是希望做每秒10万以上的数据接入,所以需要考虑建立集群。但是在使用mosquitto的过程中发现他不支持集群,所以就放弃了,转投emqttd。 在使用mosquitto过程中发现了一些问题: 在使用mosquitto时,如...

1
1
发表于硬件 & IoT专区
2019/09/16 09:50

物联网平台抽象规划

背景 最近几年公司规划了好几个工业物联网方面项目,由于前期团队较小,资源有限比较少考虑技术复用和抽象的问题,后面随着业务的不断发展,团队规模组件扩大,为了能够更好的支撑后期业务的快速迭代和输出,从整个研发体系出发不得不考技术沉淀,抽象复用的问题。 目标 根据公司业务特性,抽象提取出针对于设备连接、安全、数据分析和存储等能力,形成公司技术沉淀和后期业务快速构建的基础。提升开发效率。 分析 公司本身从事工...

0
0
发表了博客
02/03 12:40

干货分享 | 基于RocketMQ构建MQTT集群系列(1)—从MQTT协议和MQTT集群架构说起

友情提示:全文7000多文字,预计阅读时间18分钟 本文从物联网和MQTT协议说起,介绍移动云推出的面向物联网业务场景的大云消息队列E-MQTT的架构设计,对MQTT集群化的连接管理、消息路由等普遍问题作出分析。 注:文中所有对MQTT协议的描述都是基于MQTT3.1.1。 一、从5G和物联网说起 2019年是5G商用元年,先是世界各大通信运营商开启了各自的5G试点工程,10月底,三大运营商正式上线了5G商用套餐。但5G对人类的影响绝不仅仅止步于...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
2 评论
44 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部