# netty-mqtt-client
## 1. 介绍
### 1.1 基本概况
该项目是基于Netty实现的MQTT3及MQTT5协议的客户端,创建目的是为了学习和使用MQTT及Netty
### 1.2 技术栈
Java + Netty + MQTT
### 1.3 特色
1.基于高性能的网络开发框架Netty实现,性能更高
2.支持多个客户端使用同一个线程组,支持配置线程数量,占用的资源更少
3.目前支持MQTT 3.1.1以及MQTT 5版本
4.支持单向及双向SSL认证
5.支持自定义实现扩展组件
6.支持组件拦截,可实现插件扩展
7.代码全中文注释
8.支持消息持久化(目前支持Redis、内存、文件),仅保存不清理会话且未完成的客户端消息
9.支持遗嘱消息
10.支持QoS等级为:0、1、2
11.支持MQTT 3.1.1版本和MQTT 5版本相互切换,并且相互兼容
12.支持设置客户端的TCP连接参数
### 1.4 组件介绍
#### MqttConfiguration
MQTT全局配置组件,可支持配置TCP连接参数,代理工厂,拦截器,IO线程数,组件创建器及消息存储器
#### MqttClientFactory
MQTT客户端工厂,用于创建客户端,只需要传递连接参数,即可根据全局配置创建对应的MQTT客户端
#### MqttMsgStore
MQTT消息存储器,默认是用内存消息存储器,如果需要持久化,可使用Redis或文件消息存储器
#### MqttClient
MQTT客户端,面向开发者的接口,包含所有的客户端操作API
#### MqttConnectParameter
MQTT连接参数,包含MQTT3及MQTT5参数组合,通过设置不同的参数,可创建不同的客户端
#### MqttCallback
MQTT回调器,包含MQTT客户端中的所有回调,如消息发送完成回调、消息发送成功回调、连接相关回调、心跳回调、订阅回调等
#### MqttRetrier
MQTT重试器,用于重试QoS1及QoS2中失败或未完成的消息,可通过连接配置修改重试时间及间隔
#### MqttDelegateHandler
MQTT消息委托器,即MQTT客户端和Netty之间的桥梁,主要是把MQTT的消息和Netty之间的消息进行转换处理
#### MqttConnector
MQTT连接器,用于连接MQTT Broker,只负责连接工作
#### MqttChannelHandler
MQTT客户端在Netty中的出入栈的处理器,同时负责开启心跳的定时任务
#### MqttMsgIdCache
MQTT消息ID缓存器,用于生成MQTT协议层消息的ID
#### ObjectCreator
对象创建器,用于创建MqttClient、MqttConnector、MqttDelegateHandler三大组件,可自定义实现三大组件的创建及替换
#### ProxyFactory
代理工厂,主要是用于拦截器,支持多种实现,目前支持JDK动态代理以及Cglib动态代理,默认使用JDK动态代理
#### Interceptor
拦截器,仅支持拦截MqttClient、MqttConnector、MqttDelegateHandler三大组件,通过注解的方式使用,支持多层级拦截
## 2.使用
### 2.1 依赖
```
<dependency>
<groupId>io.github.xzc-coder</groupId>
<artifactId>netty-mqtt-client</artifactId>
<version>1.1.0</version>
</dependency>
```
### 2.2 初始化
```
//创建MQTT全局配置器(也可以不创建)
MqttConfiguration mqttConfiguration = new MqttConfiguration(2);
//创建MQTT客户端工厂
MqttClientFactory mqttClientFactory = new DefaultMqttClientFactory(mqttConfiguration);
//使用内存消息存储器(默认)
MqttMsgStore mqttMsgStore = new MemoryMqttMsgStore();
mqttClientFactory.setMqttMsgStore(mqttMsgStore);
//创建连接参数,设置客户端ID
MqttConnectParameter mqttConnectParameter = new MqttConnectParameter("netty-mqtt-client-test");
//创建一个客户端
MqttClient mqttClient = mqttClientFactory.createMqttClient(mqttConnectParameter);
```
### 2.3 连接
#### 连接参数设置
##### MQTT 3
```
//创建连接参数,设置客户端ID
MqttConnectParameter mqttConnectParameter = new MqttConnectParameter("xzc_test");
//设置客户端版本(默认为3.1.1)
mqttConnectParameter.setMqttVersion(MqttVersion.MQTT_3_1_1);
//是否自动重连
mqttConnectParameter.setAutoReconnect(true);
//Host
mqttConnectParameter.setHost("broker.emqx.io");
//端口
mqttConnectParameter.setPort(1883);
//是否使用SSL/TLS
mqttConnectParameter.setSsl(false);
//遗嘱消息
MqttWillMsg mqttWillMsg = new MqttWillMsg("test",new byte[]{},MqttQoS.EXACTLY_ONCE);
mqttConnectParameter.setWillMsg(mqttWillMsg);
//是否清除会话
mqttConnectParameter.setCleanSession(true);
//心跳间隔
mqttConnectParameter.setKeepAliveTimeSeconds(60);
//连接超时时间
mqttConnectParameter.setConnectTimeoutSeconds(30);
//创建一个客户端
MqttClient mqttClient = mqttClientFactory.createMqttClient(mqttConnectParameter);
//添加回调器
mqttClient.addMqttCallback(new DefaultMqttCallback());
```
##### MQTT 5
```
//创建连接参数,设置客户端ID
MqttConnectParameter mqttConnectParameter = new MqttConnectParameter("xzc_test");
//设置客户端版本
mqttConnectParameter.setMqttVersion(MqttVersion.MQTT_5_0_0);
//是否自动重连
mqttConnectParameter.setAutoReconnect(true);
//Host
mqttConnectParameter.setHost("broker.emqx.io");
//端口
mqttConnectParameter.setPort(1883);
//是否使用SSL/TLS
mqttConnectParameter.setSsl(false);
//遗嘱消息
MqttWillMsg mqttWillMsg = new MqttWillMsg("test",new byte[]{},MqttQoS.EXACTLY_ONCE);
//MQTT 5的遗嘱属性
mqttWillMsg.setResponseTopic("test-response");
mqttWillMsg.setContentType("application/text");
mqttWillMsg.addMqttUserProperty("name","test");
mqttConnectParameter.setWillMsg(mqttWillMsg);
//是否清除会话
mqttConnectParameter.setCleanSession(true);
//心跳间隔
mqttConnectParameter.setKeepAliveTimeSeconds(60);
//连接超时时间
mqttConnectParameter.setConnectTimeoutSeconds(30);
//MQTT 5的连接参数
mqttConnectParameter.setMaximumPacketSize(100);
mqttConnectParameter.setSessionExpiryIntervalSeconds(100);
mqttConnectParameter.addMqttUserProperty("name","test");
//创建一个客户端
MqttClient mqttClient = mqttClientFactory.createMqttClient(mqttConnectParameter);
//添加回调器
mqttClient.addMqttCallback(new DefaultMqttCallback());
```
#### 连接API
```
/**
* 进行连接,会阻塞至超时或者连接成功
*/
void connect();
/**
* 进行连接,不会阻塞
*
* @return MqttFutureWrapper
*/
MqttFutureWrapper connectFuture();
```
#### 示例
```
//阻塞连接
mqttClient.connect();
```
```
//非阻塞连接
MqttFutureWrapper mqttFutureWrapper = mqttClient.connectFuture();
//添加监听器
mqttFutureWrapper.addListener(mqttFuture -> {
if (mqttFuture.isSuccess()) {
System.out.println("mqtt client connect success");
} else {
System.out.println("mqtt client connect failure");
}
});
```
### 2.4 断开连接
#### 断开连接API
```
/**
* 断开连接,会阻塞至TCP断开
*/
void disconnect();
/**
* 断开连接
*
* @return Future
*/
MqttFutureWrapper disconnectFuture();
/**
* 断开连接(MQTT 5)
*
* @param mqttDisconnectMsg 断开消息
* @return Future
*/
MqttFutureWrapper disconnectFuture(MqttDisconnectMsg mqttDisconnectMsg);
/**
* 断开连接(MQTT 5)
*
* @param mqttDisconnectMsg 断开消息
*/
void disconnect(MqttDisconnectMsg mqttDisconnectMsg);
```
#### 示例
##### MQTT 3
```
//阻塞断开连接
mqttClient.disconnect();
```
```
//非阻塞断开连接
MqttFutureWrapper mqttFutureWrapper = mqttClient.disconnectFuture();
//添加监听
mqttFutureWrapper.addListener(mqttFuture -> {
if (mqttFuture.isDone()) {
System.out.println("mqtt client disconnect done");
}
});
```
##### MQTT 5
```
//设置MQTT 5的断开连接参数
MqttDisconnectMsg mqttDisconnectMsg = new MqttDisconnectMsg();
mqttDisconnectMsg.setR
没有合适的资源?快使用搜索试试~ 我知道了~
基于Netty实现的MQTT客户端详细文档+全部资料.zip
共89个文件
java:82个
xml:1个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 76 浏览量
2024-12-24
09:28:15
上传
评论
收藏 133KB ZIP 举报
温馨提示
【资源说明】 基于Netty实现的MQTT客户端详细文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于Netty实现的MQTT客户端详细文档+全部资料.zip (89个子文件)
CSDN
软件
项目授权码.txt 268B
netty-mqtt-client-main
pom.xml 7KB
src
test
resources
test.properties 129B
broker.emqx.io-ca.crt 1KB
java
io
github
netty
mqtt
client
SerializableTest.java 4KB
SubscribeTest.java 14KB
FutureTest.java 2KB
SslTest.java 5KB
SendReceiveMessageTest.java 16KB
PluginTest.java 9KB
util
PropertiesUtils.java 2KB
ConnectTest.java 11KB
main
java
io
github
netty
mqtt
client
constant
MqttMsgState.java 1KB
MqttConstant.java 7KB
MqttMsgDirection.java 938B
MqttAuthState.java 291B
MqttVersion.java 192B
retry
MqttRetrier.java 2KB
MqttConnectParameter.java 14KB
store
FileMqttMsgStore.java 6KB
MemoryMqttMsgStore.java 7KB
MqttMsgIdCache.java 5KB
RedisMqttMsgStore.java 5KB
MqttMsgStore.java 2KB
AbstractMqttClient.java 6KB
handler
channel
MqttChannelHandler.java 10KB
DefaultMqttDelegateHandler.java 41KB
MqttDelegateHandler.java 5KB
MqttClientFactory.java 3KB
MqttClient.java 9KB
callback
MqttUnSubscribeCallbackInfo.java 1KB
MqttConnectCallbackResult.java 9KB
MqttCallback.java 2KB
MqttChannelExceptionCallbackResult.java 1KB
MqttConnectLostCallbackResult.java 2KB
MqttReceiveCallbackResult.java 5KB
MqttSendCallbackResult.java 6KB
MqttCallbackResult.java 5KB
MqttSubscribeCallbackResult.java 2KB
MqttHeartbeatCallbackResult.java 271B
MqttUnSubscribeCallbackResult.java 3KB
MqttSubscribeCallbackInfo.java 2KB
Endpoint.java 524B
plugin
CglibTargetHelper.java 10KB
JdkMethodInterceptor.java 3KB
Interceptor.java 343B
BaseMethodInterceptor.java 4KB
Intercepts.java 446B
InterceptorChain.java 833B
CglibMethodInterceptor.java 1KB
Invocation.java 2KB
support
proxy
ProxyFactory.java 1KB
CglibProxyFactory.java 1KB
JdkProxyFactory.java 2KB
future
MqttFutureListener.java 337B
MqttFutureKey.java 1KB
DefaultMqttFuture.java 10KB
MqttFuture.java 7KB
MqttFutureWrapper.java 3KB
util
MqttUtils.java 34KB
LogUtils.java 4KB
ReflectionUtils.java 2KB
CRC16Utils.java 3KB
EmptyUtils.java 2KB
AssertUtils.java 1KB
DefaultMqttClient.java 35KB
DefaultMqttClientFactory.java 4KB
exception
MqttStateCheckException.java 442B
MqttException.java 1KB
connector
MqttAuthenticator.java 472B
DefaultMqttConnector.java 6KB
MqttAuthInstruct.java 2KB
AbstractMqttConnector.java 4KB
MqttConnector.java 733B
msg
MqttSubInfo.java 3KB
MqttWillMsg.java 5KB
MqttSubMsg.java 4KB
MqttMsg.java 6KB
MqttDisconnectMsg.java 3KB
MqttUnsubMsg.java 3KB
MqttMsgInfo.java 5KB
createor
ObjectCreator.java 370B
MqttClientObjectCreator.java 747B
MqttConnectorObjectCreator.java 928B
MqttDelegateHandlerObjectCreator.java 953B
MqttConfiguration.java 7KB
LICENSE 1KB
.gitignore 625B
README.md 36KB
共 89 条
- 1
资源评论
Yuki-^_^
- 粉丝: 3103
- 资源: 3611
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 年终奖发放表及个税统计表(模板).xls
- 企业年终奖发放统计表格(各大部门).xlsx
- 年终奖金相关表格(个税计算器、计算方法、相关政策).xlsx
- 年收入测算标准版(月薪、年终奖).xlsx
- 工资年终奖优化公式(终极版).xls
- 员工年终奖发放表及发放标准.xls
- 某集团有限公司企业标准:薪酬管理制度(范本) .doc
- 公司饭堂管理规定.docx
- 公司食堂菜谱.doc
- 公司食堂管理办法.doc
- 公司食堂管理制度.doc
- 公司食堂管理制度(最新).doc
- 公司员工食堂管理规定办法.doc
- 公司员工食堂管理制度.doc
- 基于51单片机空气净化器控制系统设计报告
- 动漫排名数据集,最受欢迎的动漫数据,top10000动画数据集
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功