Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mica
mica-mqtt
提交
93be5e57
mica-mqtt
项目概览
mica
/
mica-mqtt
通知
71
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
mica-mqtt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
93be5e57
编写于
8月 04, 2021
作者:
浅梦2013
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✨
mica-mqtt-spring-boot-starter 完善文档。
上级
1fc5b8fc
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
135 addition
and
114 deletion
+135
-114
docs/starter.md
docs/starter.md
+1
-51
mica-mqtt-spring-boot-example/src/main/java/net/dreamlu/iot/mqtt/mica/listener/MqttClientSubscribeListener.java
...u/iot/mqtt/mica/listener/MqttClientSubscribeListener.java
+6
-0
mica-mqtt-spring-boot-starter/README.md
mica-mqtt-spring-boot-starter/README.md
+128
-63
未找到文件。
docs/starter.md
浏览文件 @
93be5e57
# mica-mqtt-spring-boot-starter 使用文档
## 添加依赖
```
xml
<dependency>
<groupId>
net.dreamlu
</groupId>
<artifactId>
mica-mqtt-spring-boot-starter
</artifactId>
<version>
${最新版本}
</version>
</dependency>
```
## 配置项
| 配置项 | 默认值 | 说明 |
| ----- | ------ | ------ |
| mqtt.server.name | Mica-Mqtt-Server | 名称 |
| mqtt.server.port | 1883 | 端口 |
| mqtt.server.ip | 127.0.0.1 | 服务端 ip |
| mqtt.server.buffer-allocator | 堆内存 | 堆内存和堆外内存 |
| mqtt.server.heartbeat-timeout | 120s | 心跳超时时间(单位: 毫秒 默认: 1000
*
120),如果用户不希望框架层面做心跳相关工作,请把此值设为0或负数 |
| mqtt.server.read-buffer-size | 8092 | 接收数据的 buffer size,默认:8092 |
| mqtt.server.max-bytes-in-message | 8092 | 消息解析最大 bytes 长度,默认:8092 |
| mqtt.server.debug | false | debug |
## 可实现接口(注册成 Spring Bean 即可)
| 接口 | 是否必须 | 说明 |
| --------------------------- | -------------- | ------------------ |
| IMqttServerAuthHandler | 是 | 用于客户端认证 |
| IMqttMessageListener | 是 | 消息监听 |
| IMqttConnectStatusListener | 是 | 连接状态监听 |
| IMqttSessionManager | 否 | session 管理 |
| IMqttMessageStore | 集群是,单机否 | 遗嘱和保留消息存储 |
| IMqttMessageDispatcher | 集群是,单机否 | 消息转发 |
| IpStatListener | 否 | t-io ip 状态监听 |
## 自定义配置(可选)
```
java
@Configuration
(
proxyBeanMethods
=
false
)
public
class
MqttServerCustomizerConfiguration
{
@Bean
public
MqttServerCustomizer
activeRecordPluginCustomizer
()
{
return
new
MqttServerCustomizer
()
{
@Override
public
void
customize
(
MqttServerCreator
creator
)
{
// 此处可自定义配置 creator,会覆盖 yml 中的配置
System
.
out
.
println
(
"----------------MqttServerCustomizer-----------------"
);
}
};
}
}
```
\ No newline at end of file
**详见**
:
[
mica-mqtt-spring-boot-starter 使用文档
](
../mica-mqtt-spring-boot-starter/README.md
)
\ No newline at end of file
mica-mqtt-spring-boot-example/src/main/java/net/dreamlu/iot/mqtt/mica/listener/MqttClientSubscribeListener.java
浏览文件 @
93be5e57
package
net.dreamlu.iot.mqtt.mica.listener
;
import
net.dreamlu.iot.mqtt.codec.ByteBufferUtil
;
import
net.dreamlu.iot.mqtt.codec.MqttQoS
;
import
net.dreamlu.iot.mqtt.spring.client.MqttClientSubscribe
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
...
...
@@ -17,5 +18,10 @@ public class MqttClientSubscribeListener {
logger
.
info
(
"topic:{} payload:{}"
,
topic
,
ByteBufferUtil
.
toString
(
payload
));
}
@MqttClientSubscribe
(
value
=
"/qos1/#"
,
qos
=
MqttQoS
.
AT_LEAST_ONCE
)
public
void
subQos1
(
String
topic
,
ByteBuffer
payload
)
{
logger
.
info
(
"topic:{} payload:{}"
,
topic
,
ByteBufferUtil
.
toString
(
payload
));
}
}
mica-mqtt-spring-boot-starter/
readme
.md
→
mica-mqtt-spring-boot-starter/
README
.md
浏览文件 @
93be5e57
# mica-mqtt-spring-boot-starter 使用文档
## 添加依赖
```
xml
<dependency>
<groupId>
net.dreamlu
</groupId>
...
...
@@ -9,7 +10,10 @@
</dependency>
```
## 配置项
## mqtt 服务
### 配置项
| 配置项 | 默认值 | 说明 |
| ----- | ------ | ------ |
| mqtt.server.name | Mica-Mqtt-Server | 名称 |
...
...
@@ -19,43 +23,25 @@
| mqtt.server.heartbeat-timeout | 120s | 心跳超时时间(单位: 毫秒 默认: 1000
*
120),如果用户不希望框架层面做心跳相关工作,请把此值设为0或负数 |
| mqtt.server.read-buffer-size | 8092 | 接收数据的 buffer size,默认:8092 |
| mqtt.server.max-bytes-in-message | 8092 | 消息解析最大 bytes 长度,默认:8092 |
| mqtt.server.debug | false | debug |
| mqtt.server.debug | false | debug
,如果开启 prometheus 指标收集建议关闭
|
### 配置项示例
## 配置项示例
```
yaml
spring
:
mqtt
:
server
:
enable
:
true
name
:
Mica-Mqtt-Server
ip
:
127.0.0.1
port
:
5883
buffer-allocator
:
HEAP
heartbeat-timeout
:
120000
read-buffer-size
:
8092
max-bytes-in-message
:
8092
debug
:
true
client
:
enable
:
true
name
:
Mica-Mqtt-Client
ip
:
127.0.0.1
port
:
3883
user-name
:
mica
password
:
123456
timeout
:
120000
readBufferSize
:
8092
keepAliveSecs
:
60
reconnect
:
true
reInterval
:
120000
clientId
:
000001
cleanSession
:
true
version
:
MQTT_5
bufferAllocator
:
HEAP
server
:
enabled
:
true
name
:
Mica-Mqtt-Server
ip
:
127.0.0.1
port
:
5883
buffer-allocator
:
HEAP
heartbeat-timeout
:
120000
read-buffer-size
:
8092
max-bytes-in-message
:
8092
debug
:
true
```
## 可实现接口(注册成 Spring Bean 即可)
##
#
可实现接口(注册成 Spring Bean 即可)
| 接口 | 是否必须 | 说明 |
| --------------------------- | -------------- | ------------------ |
...
...
@@ -65,13 +51,15 @@ mqtt:
| IMqttSessionManager | 否 | session 管理 |
| IMqttMessageStore | 集群是,单机否 | 遗嘱和保留消息存储 |
| IMqttMessageDispatcher | 集群是,单机否 | 消息转发 |
| IpStatListener | 否 | t-io ip 转态监听 |
| IpStatListener | 否 | t-io ip 状态监听 |
### IMqttMessageListener (用于监听客户端上传的消息) 使用示例
## IMqttMessageListener (用于监听客户端上传的消息) 使用示例
```
java
@Service
public
class
MqttServerMessageListener
implements
IMqttMessageListener
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
MqttServerMessageListener
.
class
);
@Override
public
void
onMessage
(
String
clientId
,
String
topic
,
MqttQoS
mqttQoS
,
ByteBuffer
byteBuffer
)
{
logger
.
info
(
"clientId:{} topic:{} mqttQoS:{} message:{}"
,
clientId
,
topic
,
mqttQoS
,
ByteBufferUtil
.
toString
(
byteBuffer
));
...
...
@@ -79,14 +67,14 @@ public class MqttServerMessageListener implements IMqttMessageListener {
}
```
### 自定义配置(可选)
## 自定义配置(可选)
```
java
@Configuration
(
proxyBeanMethods
=
false
)
public
class
MqttServerCustomizerConfiguration
{
@Bean
public
MqttServerCustomizer
activeRecordPlugin
Customizer
()
{
public
MqttServerCustomizer
mqttServer
Customizer
()
{
return
new
MqttServerCustomizer
()
{
@Override
public
void
customize
(
MqttServerCreator
creator
)
{
...
...
@@ -99,70 +87,147 @@ public class MqttServerCustomizerConfiguration {
}
```
## MqttClientTemplate 使用示例
### MqttServerTemplate 使用示例
```
java
import
net.dreamlu.iot.mqtt.codec.
ByteBufferUtil
;
import
net.dreamlu.iot.mqtt.spring.
client.MqttClient
Template
;
import
net.dreamlu.iot.mqtt.codec.
MqttQoS
;
import
net.dreamlu.iot.mqtt.spring.
server.MqttServer
Template
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.nio.ByteBuffer
;
import
java.nio.charset.StandardCharsets
;
/**
* @author wsq
*/
@Service
public
class
Main
Service
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
Main
Service
.
class
);
public
class
Server
Service
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
Server
Service
.
class
);
@Autowired
private
Mqtt
ClientTemplate
client
;
private
Mqtt
ServerTemplate
server
;
public
boolean
publish
()
{
client
.
publish
(
"/test/client"
,
ByteBuffer
.
wrap
(
"mica最牛皮"
.
getBytes
(
StandardCharsets
.
UTF_8
))
);
public
boolean
publish
(
String
body
)
{
server
.
publishAll
(
"/test/123"
,
ByteBuffer
.
wrap
(
body
.
getBytes
()),
MqttQoS
.
EXACTLY_ONCE
);
return
true
;
}
}
```
public
boolean
sub
()
{
client
.
subQos0
(
"/test/#"
,
(
topic
,
payload
)
->
{
logger
.
info
(
topic
+
'\t'
+
ByteBufferUtil
.
toString
(
payload
));
});
## mqtt 客户端
/*client.subQos0("/#", (topic, payload) -> {
logger.info(topic + '\t' + ByteBufferUtil.toString(payload));
});*/
### 配置项
| 配置项 | 默认值 | 说明 |
| ----- | ------ | ------ |
| mqtt.client.enabled | false | 是否启用,默认:false |
| mqtt.client.ip | 127.0.0.1 | 服务端 ip,默认:127.0.0.1 |
| mqtt.client.port | 1883 | 端口,默认:1883 |
| mqtt.client.name | Mica-Mqtt-Client | 名称,默认:Mica-Mqtt-Client |
| mqtt.client.user-name | | 用户名 |
| mqtt.client.password | | 密码 |
| mqtt.client.client-id | | 客户端ID,非常重要, 默认为:MICA-MQTT- 前缀和 36进制的纳秒数 |
| mqtt.client.clean-session | true | 清除会话
<p>
false 表示如果订阅的客户机断线了,那么要保存其要推送的消息,如果其重新连接时,则将这些消息推送。 true 表示消除,表示客户机是第一次连接,消息所以以前的连接信息。
</p>
|
| mqtt.client.buffer-allocator | | ByteBuffer Allocator,支持堆内存和堆外内存,默认为:堆内存 |
| mqtt.client.read-buffer-size | | t-io 每次消息读取长度,跟 maxBytesInMessage 相关 |
| mqtt.client.reconnect | true | 自动重连 |
| mqtt.client.re-interval | | 重连重试时间 |
| mqtt.client.timeout | | 超时时间,t-io 配置,可为 null |
| mqtt.client.keep-alive-secs | 60 | Keep Alive (s) |
| mqtt.client.version | | mqtt 协议,默认:3_1_1 |
### 配置项示例
```
yaml
mqtt
:
client
:
enabled
:
true
name
:
Mica-Mqtt-Client
ip
:
127.0.0.1
port
:
3883
user-name
:
mica
password
:
123456
timeout
:
120000
readBufferSize
:
8092
keepAliveSecs
:
60
reconnect
:
true
reInterval
:
120000
clientId
:
000001
cleanSession
:
true
version
:
MQTT_5
bufferAllocator
:
HEAP
```
return
true
;
}
### 自定义 java 配置(可选)
```
java
@Configuration
(
proxyBeanMethods
=
false
)
public
class
MqttClientCustomizerConfiguration
{
@Bean
public
MqttClientCustomizer
mqttClientCustomizer
()
{
return
new
MqttClientCustomizer
()
{
@Override
public
void
customize
(
MqttClientCreator
creator
)
{
// 此处可自定义配置 creator,会覆盖 yml 中的配置
System
.
out
.
println
(
"----------------MqttServerCustomizer-----------------"
);
}
};
}
}
```
##
MqttServerTemplate 使用
示例
##
# 订阅
示例
```
java
import
net.dreamlu.iot.mqtt.codec.MqttQoS
;
import
net.dreamlu.iot.mqtt.spring.server.MqttServerTemplate
;
@Service
public
class
MqttClientSubscribeListener
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
MqttClientSubscribeListener
.
class
);
@MqttClientSubscribe
(
"/test/#"
)
public
void
subQos0
(
String
topic
,
ByteBuffer
payload
)
{
logger
.
info
(
"topic:{} payload:{}"
,
topic
,
ByteBufferUtil
.
toString
(
payload
));
}
@MqttClientSubscribe
(
value
=
"/qos1/#"
,
qos
=
MqttQoS
.
AT_LEAST_ONCE
)
public
void
subQos1
(
String
topic
,
ByteBuffer
payload
)
{
logger
.
info
(
"topic:{} payload:{}"
,
topic
,
ByteBufferUtil
.
toString
(
payload
));
}
}
```
### MqttClientTemplate 使用示例
```
java
import
net.dreamlu.iot.mqtt.codec.ByteBufferUtil
;
import
net.dreamlu.iot.mqtt.spring.client.MqttClientTemplate
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.nio.ByteBuffer
;
import
java.nio.charset.StandardCharsets
;
/**
* @author wsq
*/
@Service
public
class
Server
Service
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
Server
Service
.
class
);
public
class
Main
Service
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
Main
Service
.
class
);
@Autowired
private
Mqtt
ServerTemplate
server
;
private
Mqtt
ClientTemplate
client
;
public
boolean
publish
(
String
body
)
{
server
.
publishAll
(
"/test/123"
,
ByteBuffer
.
wrap
(
body
.
getBytes
()),
MqttQoS
.
EXACTLY_ONCE
);
public
boolean
publish
()
{
client
.
publish
(
"/test/client"
,
ByteBuffer
.
wrap
(
"mica最牛皮"
.
getBytes
(
StandardCharsets
.
UTF_8
)));
return
true
;
}
public
boolean
sub
()
{
client
.
subQos0
(
"/test/#"
,
(
topic
,
payload
)
->
{
logger
.
info
(
topic
+
'\t'
+
ByteBufferUtil
.
toString
(
payload
));
});
return
true
;
}
}
```
\ No newline at end of file
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录