Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mica
mica-mqtt
提交
452d6182
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,发现更多精彩内容 >>
提交
452d6182
编写于
4月 15, 2022
作者:
如梦技术
🐛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✨
mqtt-server 简化,默认多设备可以直接互相订阅和处理消息。
上级
a472e683
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
98 addition
and
23 deletion
+98
-23
example/mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/broker/Server.java
...ple/src/main/java/net/dreamlu/iot/mqtt/broker/Server.java
+0
-2
example/mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/server/MqttServerTest.java
...main/java/net/dreamlu/iot/mqtt/server/MqttServerTest.java
+4
-0
example/mica-mqtt-server-spring-boot-example/src/main/java/net/dreamlu/iot/mqtt/server/listener/MqttServerMessageListener.java
...u/iot/mqtt/server/listener/MqttServerMessageListener.java
+6
-5
mica-mqtt-core/README.md
mica-mqtt-core/README.md
+4
-0
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/MqttServerCreator.java
...a/net/dreamlu/iot/mqtt/core/server/MqttServerCreator.java
+14
-0
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/event/IMqttMessageListener.java
...amlu/iot/mqtt/core/server/event/IMqttMessageListener.java
+39
-0
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/support/DefaultMqttServerProcessor.java
.../mqtt/core/server/support/DefaultMqttServerProcessor.java
+11
-0
starter/mica-mqtt-server-spring-boot-starter/README.md
starter/mica-mqtt-server-spring-boot-starter/README.md
+16
-16
starter/mica-mqtt-server-spring-boot-starter/src/main/java/net/dreamlu/iot/mqtt/spring/server/MqttServerConfiguration.java
...eamlu/iot/mqtt/spring/server/MqttServerConfiguration.java
+4
-0
未找到文件。
example/mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/broker/Server.java
浏览文件 @
452d6182
...
...
@@ -35,8 +35,6 @@ public class Server {
public
static
void
main
(
String
[]
args
)
{
// 启动服务,mica-mqtt 1.3.x 已经默认为 broker 模式
MqttServer
.
create
()
.
ip
(
"0.0.0.0"
)
.
port
(
1883
)
.
debug
()
.
start
();
}
...
...
example/mica-mqtt-example/src/main/java/net/dreamlu/iot/mqtt/server/MqttServerTest.java
浏览文件 @
452d6182
...
...
@@ -16,6 +16,7 @@
package
net.dreamlu.iot.mqtt.server
;
import
net.dreamlu.iot.mqtt.codec.ByteBufferUtil
;
import
net.dreamlu.iot.mqtt.codec.MqttQoS
;
import
net.dreamlu.iot.mqtt.core.server.MqttServer
;
import
org.slf4j.Logger
;
...
...
@@ -46,6 +47,9 @@ public class MqttServerTest {
// .maxBytesInMessage(1024 * 100)
// mqtt 3.1 协议会校验 clientId 长度。
// .maxClientIdLength(64)
.
messageListener
((
context
,
clientId
,
message
)
->
{
logger
.
info
(
"clientId:{} message:{} payload:{}"
,
clientId
,
message
,
ByteBufferUtil
.
toString
(
message
.
getPayload
()));
})
// 客户端连接状态监听
.
connectStatusListener
(
new
MqttConnectStatusListener
())
// 开启 http
...
...
example/mica-mqtt-server-spring-boot-example/src/main/java/net/dreamlu/iot/mqtt/server/listener/MqttServerMessageListener.java
浏览文件 @
452d6182
package
net.dreamlu.iot.mqtt.server.listener
;
import
net.dreamlu.iot.mqtt.core.server.dispatcher.AbstractMqttMessageDispatcher
;
import
net.dreamlu.iot.mqtt.codec.ByteBufferUtil
;
import
net.dreamlu.iot.mqtt.core.server.event.IMqttMessageListener
;
import
net.dreamlu.iot.mqtt.core.server.model.Message
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
import
org.tio.core.ChannelContext
;
/**
* @author wsq
*/
@Service
public
class
MqttServerMessageListener
extends
AbstractMqttMessageDispatch
er
{
public
class
MqttServerMessageListener
implements
IMqttMessageListen
er
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
MqttServerMessageListener
.
class
);
@Override
public
void
sendAll
(
Message
message
)
{
logger
.
info
(
"
message:{}"
,
message
);
public
void
onMessage
(
ChannelContext
context
,
String
clientId
,
Message
message
)
{
logger
.
info
(
"
clientId:{} message:{} payload:{}"
,
clientId
,
message
,
ByteBufferUtil
.
toString
(
message
.
getPayload
())
);
}
}
mica-mqtt-core/README.md
浏览文件 @
452d6182
...
...
@@ -84,6 +84,10 @@ MqttServer mqttServer = MqttServer.create()
.
maxBytesInMessage
(
1024
*
100
)
// 自定义认证
.
authHandler
((
clientId
,
userName
,
password
)
->
true
)
// 消息监听
.
messageListener
((
context
,
clientId
,
message
)
->
{
logger
.
info
(
"clientId:{} message:{} payload:{}"
,
clientId
,
message
,
ByteBufferUtil
.
toString
(
message
.
getPayload
()));
})
// 堆内存和堆外内存选择,默认:堆内存
.
bufferAllocator
(
ByteBufferAllocator
.
HEAP
)
// 心跳超时时间,默认:120s
...
...
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/MqttServerCreator.java
浏览文件 @
452d6182
...
...
@@ -26,6 +26,7 @@ import net.dreamlu.iot.mqtt.core.server.broker.DefaultMqttBrokerDispatcher;
import
net.dreamlu.iot.mqtt.core.server.dispatcher.AbstractMqttMessageDispatcher
;
import
net.dreamlu.iot.mqtt.core.server.dispatcher.IMqttMessageDispatcher
;
import
net.dreamlu.iot.mqtt.core.server.event.IMqttConnectStatusListener
;
import
net.dreamlu.iot.mqtt.core.server.event.IMqttMessageListener
;
import
net.dreamlu.iot.mqtt.core.server.http.core.MqttWebServer
;
import
net.dreamlu.iot.mqtt.core.server.session.IMqttSessionManager
;
import
net.dreamlu.iot.mqtt.core.server.session.InMemoryMqttSessionManager
;
...
...
@@ -129,6 +130,10 @@ public class MqttServerCreator {
* session 管理
*/
private
IMqttSessionManager
sessionManager
;
/**
* 消息监听
*/
private
IMqttMessageListener
messageListener
;
/**
* 连接状态监听
*/
...
...
@@ -350,6 +355,15 @@ public class MqttServerCreator {
return
this
;
}
public
IMqttMessageListener
getMessageListener
()
{
return
messageListener
;
}
public
MqttServerCreator
messageListener
(
IMqttMessageListener
messageListener
)
{
this
.
messageListener
=
messageListener
;
return
this
;
}
public
IMqttConnectStatusListener
getConnectStatusListener
()
{
return
connectStatusListener
;
}
...
...
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/event/IMqttMessageListener.java
0 → 100644
浏览文件 @
452d6182
/*
* Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & dreamlu.net).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
net.dreamlu.iot.mqtt.core.server.event
;
import
net.dreamlu.iot.mqtt.core.server.model.Message
;
import
org.tio.core.ChannelContext
;
/**
* mqtt 消息处理
*
* @author L.cm
*/
@FunctionalInterface
public
interface
IMqttMessageListener
{
/**
* 监听到消息
*
* @param context ChannelContext
* @param clientId clientId
* @param message Message
*/
void
onMessage
(
ChannelContext
context
,
String
clientId
,
Message
message
);
}
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/support/DefaultMqttServerProcessor.java
浏览文件 @
452d6182
...
...
@@ -29,6 +29,7 @@ import net.dreamlu.iot.mqtt.core.server.auth.IMqttServerUniqueIdService;
import
net.dreamlu.iot.mqtt.core.server.dispatcher.IMqttMessageDispatcher
;
import
net.dreamlu.iot.mqtt.core.server.enums.MessageType
;
import
net.dreamlu.iot.mqtt.core.server.event.IMqttConnectStatusListener
;
import
net.dreamlu.iot.mqtt.core.server.event.IMqttMessageListener
;
import
net.dreamlu.iot.mqtt.core.server.model.Message
;
import
net.dreamlu.iot.mqtt.core.server.session.IMqttSessionManager
;
import
net.dreamlu.iot.mqtt.core.server.store.IMqttMessageStore
;
...
...
@@ -69,6 +70,7 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor {
private
final
IMqttServerPublishPermission
publishPermission
;
private
final
IMqttMessageDispatcher
messageDispatcher
;
private
final
IMqttConnectStatusListener
connectStatusListener
;
private
final
IMqttMessageListener
messageListener
;
private
final
ScheduledThreadPoolExecutor
executor
;
public
DefaultMqttServerProcessor
(
MqttServerCreator
serverCreator
,
ScheduledThreadPoolExecutor
executor
)
{
...
...
@@ -82,6 +84,7 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor {
this
.
publishPermission
=
serverCreator
.
getPublishPermission
();
this
.
messageDispatcher
=
serverCreator
.
getMessageDispatcher
();
this
.
connectStatusListener
=
serverCreator
.
getConnectStatusListener
();
this
.
messageListener
=
serverCreator
.
getMessageListener
();
this
.
executor
=
executor
;
}
...
...
@@ -445,6 +448,14 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor {
message
.
setPeerHost
(
clientNode
.
getIp
()
+
':'
+
clientNode
.
getPort
());
message
.
setNode
(
serverCreator
.
getNodeName
());
// 3. 消息发布
if
(
messageListener
!=
null
)
{
try
{
messageListener
.
onMessage
(
context
,
clientId
,
message
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
// 4. 消息流转
try
{
messageDispatcher
.
send
(
message
);
}
catch
(
Throwable
e
)
{
...
...
starter/mica-mqtt-server-spring-boot-starter/README.md
浏览文件 @
452d6182
...
...
@@ -62,29 +62,29 @@ mqtt:
### 2.3 可实现接口(注册成 Spring Bean 即可)
| 接口 | 是否必须 | 说明 |
| --------------------------- | -------------- | ------------------------- |
| IMqttServerUniqueIdService | 否 | 用于 clientId 不唯一时,自定义实现唯一标识,后续接口使用它替代 clientId |
| IMqttServerAuthHandler | 是 | 用于服务端认证 |
| IMqttServerSubscribeValidator | 否(建议实现) | 1.1.3 新增,用于对客户端订阅校验 |
| IMqttServerPublishPermission | 否(建议实现) | 1.2.2 新增,用于对客户端发布权限校验 |
| IMqttConnectStatusListener | 是 | 连接状态监听 |
| IMqttSessionManager | 否 | session 管理 |
| IMqttMessageStore | 集群是,单机否 | 遗嘱和保留消息存储 |
| AbstractMqttMessageDispatcher | 集群是,单机否 | 消息转发,(遗嘱、保留消息转发) |
| IpStatListener | 否 | t-io ip 状态监听 |
### 2.4 AbstractMqttMessageDispatcher (用于监听客户端上传的消息) 使用示例
| --------------------------- |------------| ------------------------- |
| IMqttServerUniqueIdService | 否 | 用于 clientId 不唯一时,自定义实现唯一标识,后续接口使用它替代 clientId |
| IMqttServerAuthHandler | 是 | 用于服务端认证 |
| IMqttServerSubscribeValidator | 否(建议实现) | 1.1.3 新增,用于对客户端订阅校验 |
| IMqttServerPublishPermission | 否(建议实现) | 1.2.2 新增,用于对客户端发布权限校验 |
| IMqttMessageListener | 否(1.3.x为否) | 消息监听 |
| IMqttConnectStatusListener | 是 | 连接状态监听 |
| IMqttSessionManager | 否 | session 管理 |
| IMqttMessageStore | 集群是,单机否 | 遗嘱和保留消息存储 |
| AbstractMqttMessageDispatcher | 集群是,单机否 | 消息转发,(遗嘱、保留消息转发) |
| IpStatListener | 否 | t-io ip 状态监听 |
### 2.4 IMqttMessageListener (用于监听客户端上传的消息) 使用示例
```
java
@Service
public
class
MqttServerMessageListener
extends
AbstractMqttMessageDispatch
er
{
public
class
MqttServerMessageListener
implements
IMqttMessageListen
er
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
MqttServerMessageListener
.
class
);
@Override
public
void
sendAll
(
Message
message
)
{
logger
.
info
(
"
message:{}"
,
message
);
public
void
onMessage
(
ChannelContext
context
,
String
clientId
,
Message
message
)
{
logger
.
info
(
"
clientId:{} message:{} payload:{}"
,
clientId
,
message
,
ByteBufferUtil
.
toString
(
message
.
getPayload
())
);
}
}
```
...
...
starter/mica-mqtt-server-spring-boot-starter/src/main/java/net/dreamlu/iot/mqtt/spring/server/MqttServerConfiguration.java
浏览文件 @
452d6182
...
...
@@ -24,6 +24,7 @@ import net.dreamlu.iot.mqtt.core.server.auth.IMqttServerSubscribeValidator;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerUniqueIdService
;
import
net.dreamlu.iot.mqtt.core.server.dispatcher.IMqttMessageDispatcher
;
import
net.dreamlu.iot.mqtt.core.server.event.IMqttConnectStatusListener
;
import
net.dreamlu.iot.mqtt.core.server.event.IMqttMessageListener
;
import
net.dreamlu.iot.mqtt.core.server.session.IMqttSessionManager
;
import
net.dreamlu.iot.mqtt.core.server.store.IMqttMessageStore
;
import
org.springframework.beans.factory.ObjectProvider
;
...
...
@@ -58,6 +59,7 @@ public class MqttServerConfiguration {
ObjectProvider
<
IMqttMessageDispatcher
>
messageDispatcherObjectProvider
,
ObjectProvider
<
IMqttMessageStore
>
messageStoreObjectProvider
,
ObjectProvider
<
IMqttSessionManager
>
sessionManagerObjectProvider
,
ObjectProvider
<
IMqttMessageListener
>
messageListenerObjectProvider
,
ObjectProvider
<
IMqttConnectStatusListener
>
connectStatusListenerObjectProvider
,
ObjectProvider
<
IpStatListener
>
ipStatListenerObjectProvider
,
ObjectProvider
<
MqttServerCustomizer
>
customizers
)
{
...
...
@@ -91,6 +93,8 @@ public class MqttServerConfiguration {
if
(
StrUtil
.
isNotBlank
(
keyStorePath
)
&&
StrUtil
.
isNotBlank
(
trustStorePath
)
&&
StrUtil
.
isNotBlank
(
password
))
{
serverCreator
.
useSsl
(
keyStorePath
,
trustStorePath
,
password
);
}
// 自定义消息监听
messageListenerObjectProvider
.
ifAvailable
(
serverCreator:
:
messageListener
);
// 认证处理器
authHandlerObjectProvider
.
ifAvailable
(
serverCreator:
:
authHandler
);
// mqtt 内唯一id
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录