基于 nutzboot + netty或t-io + redis + kafka 实现的MQTT服务broker
本项目代码主要来源于 netty/t-io/iot-mqtt-server 等众多项目,开源免费,欢迎交流学习
使用netty或t-io实现通信及协议解析
使用nutzboot提供依赖注入及属性配置
使用redis实现消息缓存,集群
使用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通信测试示例
参考MQTT3.1.1规范实现
完整的QoS服务质量等级实现
遗嘱消息, 保留消息及消息分发重试
心跳机制
MQTT连接认证(可选择是否开启)
SSL方式连接(可选择是否开启)
主题过滤(支持单主题订阅如 /mqtt/test --不可以/结尾, 通配符订阅 /mqtt/# --以/#结尾)
Websocket支持(可选择是否开启)
集群功能(可选择是否开启)
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-broker
的resources/keystore/server.jks
用户可以制作自己的证书, 但存储位置和文件名必须使用上述描述的位置及文件名
多机环境集群
负载均衡: 富人用 L4 Switch,穷人用 Linux HAProxy
前言 在前面介绍了mosquitto之后,我们来看一下常见的各类MQTT代理服务器的特性对比。 参考链接:原英文链接 本页试图记录各种MQTT服务器(代理)支持的特性。这是针对它们对MQTT的支持;其中很多服务器具有比MQTT更广泛的功能。 功能 备注 QoS 0:服务质量 0,最多传输一次。 QoS 1:服务质量1,至少传输一次。 QoS 2:服务质量2,仅仅传输一次。 auth:验证,身份验证
MqttWk可以算作开源MQTT Broker中的教科书,代码简洁易懂,虽然并不适合生产,但对照着MQTT白皮书的每个功能,都能在里面找到基本的实现,能够对Broker有个非常全面的认知以及有了兜底方案的底气(实在写不出,按这个思路先上生产也行,能用就行)。 作者wizzer其实是为了推广他写的Nutz,把MqttWk当作Nutz的一个应用场景来写的。Nutz/NutzBoot就是国产版Sprin
如果网络编程很痛苦,那一定是没用 t-io t-io是talent-tan采用java语言开发的一款网络编程框架 为什么要开发t-io 在t-io之前,已经有mina,netty这样的网络编程框架了,talent-tan出于什么考虑要重新发明轮子呢?原因很奇葩: talent-tan学习能力太差,在看了些《netty权威指南》后,觉得自己很难hold住netty,或者说要想hold住netty需要
NutzBoot,简称NB,是可靠的企业级微服务框架,提供自动配置,嵌入式web服务,分布式会话,hystrix, RPC等一篮子解决方案 功能介绍 快速创建应用,提供初始化工具Maker 嵌入式web服务(jetty/tomcat/undertow),直接打包为runnable jar 基于starter的自动配置体系,只需要添加maven依赖,即可自动发现并加载 能满足80%以上常见需求的默认
io 包为 I/O 原语提供了基本的接口。它主要包装了这些原语的已有实现。 由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户端不应假定它们对于并行执行是安全的。 在 io 包中最重要的是两个接口:Reader 和 Writer 接口。本章所提到的各种 IO 包,都跟这两个接口有关,也就是说,只要实现了这两个接口,它就有了 IO 的功能。 Reader 接口 Reader 接
什么是Nutz Boot? 简称NB! 基于Nutz的微服务方案 进一步简化Nutz项目的配置复杂度,将最佳实践模块化 可以理解为 nutz(核心)+nutzmore(插件集)+nutz-web(jetty启动器)的重新组合并优化 一键生成NB的项目: NB构建器 NutzBoot的目标 将nutz易用性再提升个一个层次 默认配置应满足80%以上的需求 默认依赖应满足80%以上的场景 几个术语 A
nutzboot-maven-plugin NutzBoot 的 Maven 插件 用法简介 在build-plugins添加本plugin <build> <plugins> <plugin> <groupId>org.nutz.boot</groupId> <artifactId>nut
本文向大家介绍Java基于IO流读取文件的方法,包括了Java基于IO流读取文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java基于IO流读取文件的方法。分享给大家供大家参考,具体如下: 希望本文所述对大家Java程序设计有所帮助。