diff --git a/example/mica-mqtt-client-solon-plugin-example/pom.xml b/example/mica-mqtt-client-solon-plugin-example/pom.xml
deleted file mode 100644
index 878b7b4..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
- 4.0.0
-
- org.dromara.mica-mqtt
- example
- ${revision}
-
- mica-mqtt-client-solon-plugin-example
-
-
-
- org.noear
- solon-web
-
-
- org.dromara.mica-mqtt
- mica-mqtt-client-solon-plugin
-
-
- org.noear
- solon-logging-simple
-
-
- org.projectlombok
- lombok
- provided
-
-
-
-
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/MqttClientApplication.java b/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/MqttClientApplication.java
deleted file mode 100644
index cefdd5e..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/MqttClientApplication.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.dromara.mica.mqtt.client.solon;
-
-import org.noear.solon.Solon;
-import org.noear.solon.annotation.Configuration;
-
-/**
- * @author wsq
- */
-@Configuration
-public class MqttClientApplication {
-
- /**
- * 先启动 mica-mqtt-server-spring-boot-example 再启动本项目,进行测试
- */
- public static void main(String[] args) {
- Solon.start(MqttClientApplication.class, args);
- }
-
-}
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/controller/ClientController.java b/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/controller/ClientController.java
deleted file mode 100644
index cd88ec5..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/controller/ClientController.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.dromara.mica.mqtt.client.solon.controller;
-
-
-import org.dromara.mica.mqtt.client.solon.service.ClientService;
-import org.noear.solon.annotation.*;
-
-@Mapping("/mqtt/client")
-@Controller
-public class ClientController {
-
- @Inject
- private ClientService service;
-
- @Post
- @Mapping("/publish")
- public boolean publish(String body) {
- return service.publish(body);
- }
-
- @Get
- @Mapping("/sub")
- public boolean sub() {
- return service.sub();
- }
-
-}
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientConnectedListener.java b/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientConnectedListener.java
deleted file mode 100644
index 65464f8..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientConnectedListener.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.client.solon.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.client.solon.event.MqttConnectedEvent;
-import org.dromara.mica.mqtt.core.client.MqttClientCreator;
-import org.noear.solon.annotation.Component;
-import org.noear.solon.annotation.Inject;
-import org.noear.solon.core.event.EventListener;
-
-/**
- * 客户端连接状态监听
- *
- * @author L.cm
- */
-@Slf4j
-@Component
-public class MqttClientConnectedListener implements EventListener {
- @Inject
- private MqttClientCreator mqttClientCreator;
-
- @Override
- public void onEvent(MqttConnectedEvent mqttConnectedEvent) throws Throwable {
- log.info("MqttConnectedEvent:{}", mqttConnectedEvent);
- }
-}
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientDisconnectListener.java b/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientDisconnectListener.java
deleted file mode 100644
index 8e8d7c7..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientDisconnectListener.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.client.solon.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.client.solon.event.MqttDisconnectEvent;
-import org.dromara.mica.mqtt.core.client.MqttClientCreator;
-import org.noear.solon.annotation.Component;
-import org.noear.solon.annotation.Inject;
-import org.noear.solon.core.event.EventListener;
-
-/**
- * 客户端连接状态监听
- *
- * @author L.cm
- */
-@Slf4j
-@Component
-public class MqttClientDisconnectListener implements EventListener {
- @Inject
- private MqttClientCreator mqttClientCreator;
-
- @Override
- public void onEvent(MqttDisconnectEvent mqttDisconnectEvent) throws Throwable {
- log.info("MqttDisconnectEvent:{}", mqttDisconnectEvent);
- // 在断线时更新 clientId、username、password,只能改这 3 个,不可调用其他方法。
-// mqttClientCreator.clientId("newClient" + System.currentTimeMillis())
-// .username("newUserName")
-// .password("newPassword");
- }
-}
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientMessageListener.java b/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientMessageListener.java
deleted file mode 100644
index d82e63f..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientMessageListener.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.dromara.mica.mqtt.client.solon.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.core.annotation.MqttClientSubscribe;
-import org.dromara.mica.mqtt.codec.message.MqttPublishMessage;
-import org.dromara.mica.mqtt.core.client.IMqttClientMessageListener;
-import org.tio.core.ChannelContext;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 客户端消息监听的另一种方式
- *
- * @author L.cm
- */
-@Slf4j
-@MqttClientSubscribe("${topic1}")
-public class MqttClientMessageListener implements IMqttClientMessageListener {
-
- @Override
- public void onMessage(ChannelContext context, String topic, MqttPublishMessage message, byte[] payload) {
- log.info("MqttClientMessageListener,topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
- }
-}
-
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientSubscribeListener.java b/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientSubscribeListener.java
deleted file mode 100644
index 759426a..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/listener/MqttClientSubscribeListener.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.dromara.mica.mqtt.client.solon.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.core.annotation.MqttClientSubscribe;
-import org.dromara.mica.mqtt.client.solon.pojo.User;
-import org.dromara.mica.mqtt.codec.MqttQoS;
-import org.dromara.mica.mqtt.codec.message.MqttPublishMessage;
-import org.dromara.mica.mqtt.core.deserialize.MqttJsonDeserializer;
-import org.noear.solon.annotation.Component;
-
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-
-/**
- * 客户端消息监听
- *
- * @author L.cm
- */
-@Slf4j
-@Component
-public class MqttClientSubscribeListener {
-
- @MqttClientSubscribe("/test/#")
- public void subQos0(String topic, byte[] payload) {
- log.info("MqttClientSubscribeListener.subQos0,topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
- }
-
- @MqttClientSubscribe(value = "/qos1/#", qos = MqttQoS.QOS1)
- public void subQos1(String topic, byte[] payload) {
- log.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
- }
-
- @MqttClientSubscribe(
- value = "/test/json",
- deserialize = MqttJsonDeserializer.class // 2.4.5 开始支持 自定义序列化,默认 json 序列化
- )
- public void testJson(String topic, MqttPublishMessage message, Map data) {
- // solon 插件为 2.4.6 开始支持,支持 2 到 3 个参数,字段类型映射规则(顺序)如下
- // String 字符串会默认映射到 topic,
- // Map topicVars 会默认映射到 topic 中的变量解析(v2.5.4支持),注意:别跟消息序列化的冲突,消息反序列化不要用 Map
- // MqttPublishMessage 会默认映射到 原始的消息,可以拿到 mqtt5 的 props 参数
- // byte[] 会映射到 mqtt 消息内容 payload
- // ByteBuffer 会映射到 mqtt 消息内容 payload
- // 其他类型会走序列化,确保消息能够序列化,默认为 json 序列化
- log.info("topic:{} json data:{}", topic, data);
- }
-
- @MqttClientSubscribe(value = "/test/object")
- public void testJson(String topic, MqttPublishMessage message, User data) {
- log.info("topic:{} json data:{}", topic, data);
- }
-
- /**
- * 订阅,参数为可选,但是参数数量必须大于 2,
- *
- * @param topic topic 参数,可选参数
- * @param topicVars 订阅 topic 模板 ${productKey} 中的变量解析(v2.5.4支持),可选参数,注意:类型必须为 Map
- * @param payload 消息内容
- */
- @MqttClientSubscribe("/sys/${productKey}/${deviceName}/thing/sub/register")
- public void thingSubRegister(String topic, Map topicVars, byte[] payload) {
- // 1.3.8 开始支持,@MqttClientSubscribe 注解支持 ${} 变量替换,会默认替换成 +
- // 注意:mica-mqtt 会先从 Spring boot 配置中替换参数 ${},如果存在配置会优先被替换。
- log.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
- }
-
-}
-
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/pojo/User.java b/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/pojo/User.java
deleted file mode 100644
index 03459db..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/pojo/User.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.dromara.mica.mqtt.client.solon.pojo;
-
-import lombok.Data;
-
-@Data
-public class User {
- private String name;
- private T girlfriend;
-}
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/service/ClientService.java b/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/service/ClientService.java
deleted file mode 100644
index 1b85f4b..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/client/solon/service/ClientService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.dromara.mica.mqtt.client.solon.service;
-
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.client.solon.MqttClientTemplate;
-import org.noear.solon.annotation.Component;
-import org.noear.solon.annotation.Inject;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * @author wsq
- */
-@Slf4j
-@Component
-public class ClientService {
- @Inject
- private MqttClientTemplate client;
-
- public boolean publish(String body) {
- client.publish("/test/client", body.getBytes(StandardCharsets.UTF_8));
- return true;
- }
-
- public boolean sub() {
- client.subQos0("/test/#", (context, topic, message, payload) -> {
- log.info("{}\t{}", topic, new String(payload, StandardCharsets.UTF_8));
- });
- return true;
- }
-
-}
diff --git a/example/mica-mqtt-client-solon-plugin-example/src/main/resources/app.yml b/example/mica-mqtt-client-solon-plugin-example/src/main/resources/app.yml
deleted file mode 100644
index cf796e5..0000000
--- a/example/mica-mqtt-client-solon-plugin-example/src/main/resources/app.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-server:
- port: 30303
-# solon 配置
-solon:
- logging:
- appender:
- console:
- level: INFO
-# mqtt-client 配置
-mqtt:
- client:
- enabled: true # 是否开启客户端,默认:true
- ip: 127.0.0.1 # 连接的服务端 ip ,默认:127.0.0.1
- port: 1883 # 端口:默认:1883
- name: Mica-Mqtt-Client # 名称,默认:Mica-Mqtt-Client
- clientId: 000001 # 客户端Id(非常重要,一般为设备 sn,不可重复)
- username: mica # 认证的用户名,注意:2.5.x 开始将 user-name 改成了 username
- password: mica # 认证的密码
- timeout: 5 # 超时时间,单位:秒,默认:5秒
- reconnect: true # 是否重连,默认:true
- re-interval: 5000 # 重连时间,默认 5000 毫秒
- version: mqtt_3_1_1 # mqtt 协议版本,可选 MQTT_3_1、mqtt_3_1_1、mqtt_5,默认:mqtt_3_1_1
- read-buffer-size: 8KB # 接收数据的 buffer size,默认:8k
- max-bytes-in-message: 10MB # 消息解析最大 bytes 长度,默认:10M
- keep-alive-secs: 60 # keep-alive 时间,单位:秒
- heartbeat-mode: LAST_REQ # 心跳模式,支持最后发送或接收心跳时间来计算心跳,默认:最后发送心跳的时间。(2.4.3 开始支持)
- heartbeat-timeout-strategy: PING # 心跳超时策略,支持发送 PING 和 CLOSE 断开连接,默认:最大努力发送 PING。(2.4.3 开始支持)
- clean-start: true # session 保留 2.5.x 使用 clean-start,老版本用 clean-session,默认:true
- ssl:
- enabled: false # 是否开启 ssl 认证,2.1.0 开始支持双向认证
- keystore-path: # 可选参数:ssl 双向认证 keystore 目录,支持 classpath:/ 路径。
- keystore-pass: # 可选参数:ssl 双向认证 keystore 密码
- truststore-path: # 可选参数:ssl 双向认证 truststore 目录,支持 classpath:/ 路径。
- truststore-pass: # 可选参数:ssl 双向认证 truststore 密码
-
-topic1: /test/#
diff --git a/example/mica-mqtt-example/pom.xml b/example/mica-mqtt-example/pom.xml
deleted file mode 100644
index 53a3d39..0000000
--- a/example/mica-mqtt-example/pom.xml
+++ /dev/null
@@ -1,183 +0,0 @@
-
-
- 4.0.0
- mica-mqtt-example
- ${project.artifactId}
-
-
- org.dromara.mica-mqtt
- example
- ${revision}
-
-
-
- 25.0.1
- org.dromara.mica.mqtt.server.MqttServerTest
- org.dromara.mica.mqtt.client.MqttClientTest
-
-
-
-
- org.dromara.mica-mqtt
- mica-mqtt-client
-
-
- org.dromara.mica-mqtt
- mica-mqtt-server
-
-
- com.google.code.gson
- gson
-
-
-
-
- ${project.artifactId}
-
-
-
-
- jar
-
- true
-
-
-
-
- org.tinylog
- slf4j-tinylog
-
-
- org.tinylog
- tinylog-impl
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
- 3.8.0
-
-
-
- ${mainClass.server}
-
-
-
- jar-with-dependencies
-
- false
-
-
-
- make-assembly
- package
-
- single
-
-
-
-
-
-
-
-
- mqtt-server-graal
-
-
-
- org.slf4j
- slf4j-jdk14
-
-
-
- org.graalvm.sdk
- graal-sdk
- ${graalvm.version}
- provided
-
-
-
- mqtt-server-graal
-
-
- org.graalvm.nativeimage
- native-image-maven-plugin
- 21.2.0
-
-
-
- native-image
-
- package
-
-
-
- false
- mqtt-server-graalvm
- ${mainClass.server}
-
- -H:+RemoveSaturatedTypeFlows
- --allow-incomplete-classpath
- --no-fallback
-
-
-
-
-
-
-
- mqtt-client-graal
-
-
-
- org.slf4j
- slf4j-jdk14
-
-
-
- org.graalvm.sdk
- graal-sdk
- ${graalvm.version}
- provided
-
-
-
- mqtt-client-graal
-
-
- org.graalvm.nativeimage
- native-image-maven-plugin
- 21.2.0
-
-
-
- native-image
-
- package
-
-
-
- false
- mqtt-client-graalvm
- ${mainClass.client}
-
- -H:+RemoveSaturatedTypeFlows
- --allow-incomplete-classpath
- --no-fallback
-
-
-
-
-
-
-
-
-
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/aliyun/MqttClientTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/aliyun/MqttClientTest.java
deleted file mode 100644
index 426ed5d..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/aliyun/MqttClientTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.aliyun;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-
-import java.nio.charset.StandardCharsets;
-import java.util.concurrent.ThreadLocalRandom;
-
-/**
- * 客户端测试
- *
- * @author L.cm
- */
-public class MqttClientTest {
-
- public static void main(String[] args) {
- String productKey = "g27jB42P9hm";
- String deviceName = "3dbc1cb4";
- String deviceSecret = "";
- // 计算MQTT连接参数。
- MqttSign sign = new MqttSign(productKey, deviceName, deviceSecret);
-
- String username = sign.getUsername();
- String password = sign.getPassword();
- String clientId = sign.getClientId();
- System.out.println("username: " + username);
- System.out.println("password: " + password);
- System.out.println("clientid: " + clientId);
-
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip(productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com")
- .port(443)
- .username(username)
- .password(password)
- .clientId(clientId)
- .connectSync();
-
- client.subQos0("/sys/" + productKey + '/' + deviceName + "/thing/event/property/post_reply", (context, topic, message, payload) -> {
- System.out.println(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- });
-
- client.schedule(() -> {
- int LightSwitch = ThreadLocalRandom.current().nextBoolean() ? 0 : 1;
- String content = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":" + LightSwitch + "}}";
- client.publish("/sys/" + productKey + "/" + deviceName + "/thing/event/property/post", content.getBytes(StandardCharsets.UTF_8));
- }, 3000);
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/aliyun/MqttSign.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/aliyun/MqttSign.java
deleted file mode 100644
index 999096a..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/aliyun/MqttSign.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.aliyun;
-
-import org.tio.utils.mica.DigestUtils;
-
-import java.util.Objects;
-
-/**
- * 阿里云 mqtt 签名方式
- *
- * @author L.cm
- */
-public class MqttSign {
- /**
- * 用户名
- */
- private final String username;
- /**
- * 密码
- */
- private final String password;
- /**
- * 客户端id
- */
- private final String clientId;
-
- public MqttSign(String productKey, String deviceName, String deviceSecret) {
- Objects.requireNonNull(productKey, "productKey is null");
- Objects.requireNonNull(deviceName, "deviceName is null");
- Objects.requireNonNull(deviceSecret, "deviceSecret is null");
- this.username = deviceName + '&' + productKey;
- String timestamp = Long.toString(System.currentTimeMillis());
- this.password = getPassword(productKey, deviceName, deviceSecret, timestamp);
- this.clientId = getClientId(productKey, deviceName, timestamp);
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public String getClientId() {
- return clientId;
- }
-
- private static String getPassword(String productKey, String deviceName, String deviceSecret, String timestamp) {
- String plainPwd = "clientId" + productKey + '.' + deviceName + "deviceName" +
- deviceName + "productKey" + productKey + "timestamp" + timestamp;
- return hmacSha256(plainPwd, deviceSecret);
- }
-
- private static String getClientId(String productKey, String deviceName, String timestamp) {
- return productKey + '.' + deviceName + "|timestamp=" + timestamp + ",_v=paho-java-1.0.0,securemode=2,signmethod=hmacsha256|";
- }
-
- private static String hmacSha256(String plainText, String key) {
- if (plainText == null || key == null) {
- return null;
- }
- return DigestUtils.hmacSha256Hex(plainText, key);
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttBenchmark.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttBenchmark.java
deleted file mode 100644
index b3e495f..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttBenchmark.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.benchmark;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.tio.utils.hutool.StrUtil;
-import org.tio.utils.thread.ThreadUtils;
-import org.tio.utils.thread.pool.SynThreadPoolExecutor;
-import org.tio.utils.timer.DefaultTimerTaskService;
-import org.tio.utils.timer.TimerTaskService;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-
-/**
- * mqtt 压力测试
- *
- * @author L.cm
- */
-public class MqttBenchmark {
-
- public static void main(String[] args) {
- // 注意: windows 上需要修改最大的 Tcp 连接数,不然超不过 2W。
- // 《修改Windows服务器最大的Tcp连接数》:https://www.jianshu.com/p/00136a97d2d8
- int connCount = 5_0000;
- String ip = "127.0.0.1";
- // 优化:使用ArrayList+预分配容量,性能比CopyOnWriteArrayList好很多
- // 对于压测场景,不需要线程安全的写操作(因为是单线程创建客户端)
- final List clientList = new ArrayList<>(connCount);
- SynThreadPoolExecutor tioExecutor = ThreadUtils.getTioExecutor();
- ExecutorService groupExecutor = ThreadUtils.getGroupExecutor();
- // 自定义全局 taskService,避免每个 client new,创建过多线程
- TimerTaskService taskService = new DefaultTimerTaskService(200L, 60);
- for (int i = 0; i < connCount; i++) {
- newClient(ip, i, clientList, tioExecutor, groupExecutor, taskService);
- }
- }
-
- private static void newClient(String ip, int i, final List clientList,
- SynThreadPoolExecutor tioExecutor,
- ExecutorService groupExecutor,
- TimerTaskService taskService) {
- MqttClient client = MqttClient.create()
- .ip(ip)
- .clientId(StrUtil.getNanoId() + i)
- .readBufferSize(128)
- // 取消自动重连
- .reconnect(false)
- .tioExecutor(tioExecutor)
- .groupExecutor(groupExecutor)
- .mqttExecutor(tioExecutor)
- .taskService(taskService)
- .connect();
- clientList.add(client);
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttPublishBench.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttPublishBench.java
deleted file mode 100644
index f7bf2d7..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttPublishBench.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.dromara.mica.mqtt.benchmark;
-
-import org.dromara.mica.mqtt.codec.MqttQoS;
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.tio.utils.hutool.StrUtil;
-import org.tio.utils.thread.ThreadUtils;
-import org.tio.utils.thread.pool.SynThreadPoolExecutor;
-import org.tio.utils.timer.DefaultTimerTaskService;
-import org.tio.utils.timer.TimerTaskService;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
-/**
- * mqtt 发布端测试
- *
- * @author L.cm
- */
-public class MqttPublishBench {
-
- public static void main(String[] args) {
- int clientCount = 10;
- int publishCount = 10000;
- MqttQoS qos = MqttQoS.QOS0;
- List clients = getClient(clientCount);
- Executors.newScheduledThreadPool(ThreadUtils.AVAILABLE_PROCESSORS).scheduleWithFixedDelay(() -> {
- for (MqttClient mqttClient : clients) {
- for (int j = 0; j < publishCount; j++) {
- byte[] payload = new byte[1024 + j];
- Arrays.fill(payload, (byte) -1);
- mqttClient.publish("/topic/" + j, payload, qos);
- }
- }
- }, 1L, 1L, TimeUnit.SECONDS);
- }
-
- public static List getClient(int clientCount) {
- SynThreadPoolExecutor tioExecutor = ThreadUtils.getTioExecutor();
- ExecutorService groupExecutor = ThreadUtils.getGroupExecutor();
- TimerTaskService taskService = new DefaultTimerTaskService();
- List clients = new ArrayList<>();
- for (int i = 0; i < clientCount; i++) {
- MqttClient client = MqttClient.create()
- .clientId(StrUtil.getNanoId())
- .tioExecutor(tioExecutor)
- .groupExecutor(groupExecutor)
- .mqttExecutor(groupExecutor)
- .taskService(taskService)
- .connectSync();
- clients.add(client);
- }
- return clients;
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttServerBench.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttServerBench.java
deleted file mode 100644
index 6597352..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/benchmark/MqttServerBench.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.benchmark;
-
-import org.dromara.mica.mqtt.core.server.MqttServer;
-
-/**
- * mqtt 服务端测试
- *
- * @author L.cm
- */
-public class MqttServerBench {
-
- public static void main(String[] args) {
- // 设定日志级别为 error
- System.setProperty("tinylog.writer.level", "error");
- // 启动 mqtt 服务
- MqttServer.create()
- .enableMqtt()
- .statEnable(false)
- .start();
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceA.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceA.java
deleted file mode 100644
index c44ab75..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceA.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.broker;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 设备 A,这里默认 APP 应用端
- *
- * @author L.cm
- */
-public class DeviceA {
- private static final Logger logger = LoggerFactory.getLogger(DeviceA.class);
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("127.0.0.1")
- .port(1883)
- .username("admin")
- .password("123456")
- .connectSync();
-
- client.subQos0("/a/door/open", (context, topic, message, payload) -> {
- logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- });
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceB.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceB.java
deleted file mode 100644
index 4f8aa6d..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceB.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.broker;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 设备 B,这里默认 web 端
- *
- * @author L.cm
- */
-public class DeviceB {
- private static final Logger logger = LoggerFactory.getLogger(DeviceB.class);
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("127.0.0.1")
- .port(1883)
- .username("admin")
- .password("123456")
- .connectSync();
-
- client.subQos0("/a/door/open", (context, topic, message, payload) -> {
- logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- });
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceC.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceC.java
deleted file mode 100644
index 13f0f26..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceC.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.broker;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-
-/**
- * 设备 C,每 5 秒上报一个数据
- *
- * @author L.cm
- */
-public class DeviceC {
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("127.0.0.1")
- .port(1883)
- .username("admin")
- .password("123456")
- .connectSync();
-
- client.schedule(() -> {
- client.publish("/a/door/open", null);
-
- }, 5000);
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceD.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceD.java
deleted file mode 100644
index a47236e..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/DeviceD.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.dromara.mica.mqtt.broker;
-
-import org.dromara.mica.mqtt.codec.MqttQoS;
-import org.dromara.mica.mqtt.core.annotation.MqttRetain;
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.dromara.mica.mqtt.core.annotation.MqttClientPublish;
-import org.dromara.mica.mqtt.core.annotation.MqttPayload;
-
-/**
- * @author ChangJin Wei (魏昌进)
- */
-public class DeviceD {
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("127.0.0.1")
- .port(1883)
- .username("admin")
- .password("123456")
- .connectSync();
-
-
- DoorClient doorClient = client.getInterface(DoorClient.class);
-
- client.schedule(() -> {
- doorClient.sendMessage("open", false);
- }, 1000);
- }
-
- public interface DoorClient {
-
- @MqttClientPublish(value = "/a/door/open", qos = MqttQoS.QOS0)
- void sendMessage(@MqttPayload String message, @MqttRetain boolean retain);
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/Server.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/Server.java
deleted file mode 100644
index 0934bd1..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/broker/Server.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.broker;
-
-import org.dromara.mica.mqtt.core.server.MqttServer;
-
-/**
- * 服务端,单纯的做消息转发
- *
- * @author L.cm
- */
-public class Server {
-
- /**
- * 客户端 A 模拟 APP 端订阅 `/a/door/open`,
- * 客户端 B 模拟 web 网页端 mqtt.js 订阅 `/a/door/open`,
- * Mqtt 服务端实现 `IMqttMessageListener`,将消息转交给 `AbstractMqttMessageDispatcher`(自定义实现)处理。
- * 客户端 C 定时上报转态给 `/a/door/open`
- * 结果:A 和 B 将收到 C 或 D 发布的消息,并完成相应的效果展示。
- */
- public static void main(String[] args) {
- // 启动服务,mica-mqtt 1.3.x 已经默认为 broker 模式
- MqttServer.create()
- .enableMqtt()
- .debug()
- .start();
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/Mqtt5ClientTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/Mqtt5ClientTest.java
deleted file mode 100644
index 355dcd6..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/Mqtt5ClientTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.client;
-
-import org.dromara.mica.mqtt.codec.message.MqttPublishMessage;
-import org.dromara.mica.mqtt.codec.MqttQoS;
-import org.dromara.mica.mqtt.codec.MqttVersion;
-import org.dromara.mica.mqtt.core.client.IMqttClientMessageListener;
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.tio.core.ChannelContext;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 客户端测试
- *
- * @author L.cm
- */
-public class Mqtt5ClientTest {
- private static final Logger logger = LoggerFactory.getLogger(Mqtt5ClientTest.class);
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("127.0.0.1")
- .port(1883)
- .username("mica")
- .password("mica")
- .version(MqttVersion.MQTT_5)
- .cleanStart(false)
- .sessionExpiryIntervalSecs(7200)
- .connectListener(new MqttClientConnectListener())
- .willMessage(builder -> {
- builder.topic("/test/offline")
- .messageText("down")
- .retain(false)
- .qos(MqttQoS.QOS0); // 遗嘱消息
- })
- // 同步连接,也可以使用 connect() 异步(可以避免 broker 没启动照成启动卡住),但是下面的订阅和发布可能还没连接成功。
- .connectSync();
-
- client.subQos0("/test/123", new IMqttClientMessageListener() {
- @Override
- public void onSubscribed(ChannelContext context, String topicFilter, MqttQoS mqttQoS) {
- // 订阅成功之后触发,可在此处做一些业务逻辑
- logger.info("topicFilter:{} MqttQoS:{} 订阅成功!!!", topicFilter, mqttQoS);
- }
-
- @Override
- public void onMessage(ChannelContext context, String topic, MqttPublishMessage message, byte[] payload) {
- logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- }
- });
-
- client.publish("/test/client", "mica最牛皮1".getBytes(StandardCharsets.UTF_8));
- client.publish("/test/client", "mica最牛皮2".getBytes(StandardCharsets.UTF_8));
- client.publish("/test/client", "mica最牛皮3".getBytes(StandardCharsets.UTF_8));
-
- client.schedule(() -> {
- client.publish("/test/client", "mica最牛皮".getBytes(StandardCharsets.UTF_8));
- }, 1000);
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientConnTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientConnTest.java
deleted file mode 100644
index 4a6c376..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientConnTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.client;
-
-import org.dromara.mica.mqtt.codec.codes.MqttConnectReasonCode;
-import org.dromara.mica.mqtt.core.client.MqttClient;
-
-/**
- * 客户端测试
- *
- * @author L.cm
- */
-public class MqttClientConnTest {
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttConnectReasonCode reasonCode = MqttClient.create()
-// .ip("127.0.0.1")
- .ip("mqtt.dreamlu.net")
- .port(1883)
- .username("mica")
- .password("mica1")
- .connectTest();
- System.out.println(reasonCode);
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientConnectListener.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientConnectListener.java
deleted file mode 100644
index f5f72e5..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientConnectListener.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.client;
-
-import org.dromara.mica.mqtt.core.client.IMqttClientConnectListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.tio.core.ChannelContext;
-
-/**
- * 客户端连接状态监听
- *
- * @author L.cm
- */
-public class MqttClientConnectListener implements IMqttClientConnectListener {
- private static final Logger logger = LoggerFactory.getLogger(MqttClientConnectListener.class);
-
- @Override
- public void onConnected(ChannelContext context, boolean isReconnect) {
- String clientId = context.getId();
- if (isReconnect) {
- logger.info("重连 mqtt 服务器重连成功... clientId:{}", clientId);
- } else {
- logger.info("连接 mqtt 服务器成功... clientId:{}", clientId);
- }
- }
-
- @Override
- public void onDisconnect(ChannelContext context, Throwable throwable, String remark, boolean isRemove) {
- String clientId = context.getId();
- logger.error("mqtt 链接断开 remark:{} isRemove:{} clientId:{}", remark, isRemove, clientId, throwable);
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientGlobalTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientGlobalTest.java
deleted file mode 100644
index 08abc30..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientGlobalTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.client;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.tio.utils.buffer.ByteBufferUtil;
-
-/**
- * 客户端全局订阅测试
- *
- * @author L.cm
- */
-public class MqttClientGlobalTest {
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient.create()
- .ip("127.0.0.1")
- .port(1883)
- .username("admin")
- .password("123456")
- // 采用 globalSubscribe,保留 session 停机重启后,可以接受到离线消息,注意:clientId 要不能变化。
- .clientId("globalTest")
- .cleanStart(false)
- // 全局订阅的 topic
- .globalSubscribe("/test", "/test/123", "/debug/#")
- // 全局监听,也会监听到服务端 http api 订阅的数据
- .globalMessageListener((context, topic, message, payload) -> {
- System.out.println("topic:\t" + topic);
- System.out.println("payload:\t" + ByteBufferUtil.toString(payload));
- })
-// .debug()
- .connectSync();
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientSyncTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientSyncTest.java
deleted file mode 100644
index 8897745..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientSyncTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.client;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 客户端测试
- *
- * @author L.cm
- */
-public class MqttClientSyncTest {
- private static final Logger logger = LoggerFactory.getLogger(MqttClientSyncTest.class);
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("127.0.0.1")
- .port(1883)
- .username("mica")
- .password("mica")
- .connectListener(new MqttClientConnectListener())
- // 同步连接,注意:连接会阻塞
- .connectSync();
-
- client.subQos0("/test/#", (context, topic, message, payload) -> {
- logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- });
-
- client.unSubscribe("/test/#", "/test/123");
-
- // 连接上之后发送消息,注意:连接时出现异常等就不会发出
- client.publish("/test/client", "mica最牛皮".getBytes(StandardCharsets.UTF_8));
- // 2.3.0 开始支持,可停止
-// client.stop();
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientTest.java
deleted file mode 100644
index a61a66a..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/client/MqttClientTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.client;
-
-import org.dromara.mica.mqtt.codec.message.MqttPublishMessage;
-import org.dromara.mica.mqtt.codec.MqttQoS;
-import org.dromara.mica.mqtt.core.client.IMqttClientMessageListener;
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.tio.core.ChannelContext;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 客户端测试
- *
- * @author L.cm
- */
-public class MqttClientTest {
- private static final Logger logger = LoggerFactory.getLogger(MqttClientTest.class);
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("127.0.0.1")
- .port(1883)
- .username("mica")
- .password("mica")
- // 绑定网卡 v2.5.1 添加,支持 bindIp(网卡ip)和 bindNetworkInterface(网卡名)取一即可
-// .bindIp("127.0.0.1")
-// .bindNetworkInterface("lo")
-// 如果包体过大,建议将此参数设置和 maxBytesInMessage 一样大
-// .readBufferSize(1024 * 10)
-// 最大包体长度,如果包体过大需要设置此参数
-// .maxBytesInMessage(1024 * 10)
-// .version(MqttVersion.MQTT_5)
-// 连接监听
- .connectListener(new MqttClientConnectListener())
- // 遗嘱消息
- .willMessage(builder -> {
- builder.topic("/test/offline")
- .messageText("down")
- .retain(false)
- .qos(MqttQoS.QOS0)
- // mqtt5 遗嘱消息属性
- .willProperties(props -> {
- props.setWillDelayInterval(1000);
- props.setContentType("text/plain");
- });
- })
- // 同步连接,也可以使用 connect() 异步(可以避免 broker 没启动照成启动卡住),但是下面的订阅和发布可能还没连接成功。
- .connectSync();
-
- client.subQos0("/test/#", new IMqttClientMessageListener() {
- @Override
- public void onSubscribed(ChannelContext context, String topicFilter, MqttQoS mqttQoS) {
- // 订阅成功之后触发,可在此处做一些业务逻辑
- logger.info("topicFilter:{} MqttQoS:{} 订阅成功!!!", topicFilter, mqttQoS);
- }
-
- @Override
- public void onMessage(ChannelContext context, String topic, MqttPublishMessage message, byte[] payload) {
- logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- }
- });
-
- client.subQos0("/test/1", new IMqttClientMessageListener() {
- @Override
- public void onSubscribed(ChannelContext context, String topicFilter, MqttQoS mqttQoS) {
- // 订阅成功之后触发,可在此处做一些业务逻辑
- logger.info("topicFilter:{} MqttQoS:{} 订阅成功!!!", topicFilter, mqttQoS);
- }
-
- @Override
- public void onMessage(ChannelContext context, String topic, MqttPublishMessage message, byte[] payload) {
- logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- }
- });
-
- client.subQos0("/test/2", new IMqttClientMessageListener() {
- @Override
- public void onSubscribed(ChannelContext context, String topicFilter, MqttQoS mqttQoS) {
- // 订阅成功之后触发,可在此处做一些业务逻辑
- logger.info("topicFilter:{} MqttQoS:{} 订阅成功!!!", topicFilter, mqttQoS);
- }
-
- @Override
- public void onMessage(ChannelContext context, String topic, MqttPublishMessage message, byte[] payload) {
- logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- }
- });
-
- client.subQos0("/test/3", new IMqttClientMessageListener() {
- @Override
- public void onSubscribed(ChannelContext context, String topicFilter, MqttQoS mqttQoS) {
- // 订阅成功之后触发,可在此处做一些业务逻辑
- logger.info("topicFilter:{} MqttQoS:{} 订阅成功!!!", topicFilter, mqttQoS);
- }
-
- @Override
- public void onMessage(ChannelContext context, String topic, MqttPublishMessage message, byte[] payload) {
- logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- }
- });
-
- client.publish("/test/client", "mica最牛皮1".getBytes(StandardCharsets.UTF_8));
- client.publish("/test/client", "mica最牛皮2".getBytes(StandardCharsets.UTF_8));
- client.publish("/test/client", "mica最牛皮3".getBytes(StandardCharsets.UTF_8));
-
- client.schedule(() -> {
- client.publish("/test/client", "mica最牛皮".getBytes(StandardCharsets.UTF_8));
- }, 2000);
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/huawei/MqttClientTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/huawei/MqttClientTest.java
deleted file mode 100644
index cd15e04..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/huawei/MqttClientTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.huawei;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 客户端测试
- *
- * @author L.cm
- */
-public class MqttClientTest {
-
- public static void main(String[] args) {
- // 设备id和密钥,请从华为云iot获取
- String deviceId = "630eb6f8664c6f7938db6ef0_test";
- String deviceSecret = "";
- // 计算MQTT连接参数。
- MqttSign sign = new MqttSign(deviceId, deviceSecret);
-
- String username = sign.getUsername();
- String password = sign.getPassword();
- String clientId = sign.getClientId();
- System.out.println("username: " + username);
- System.out.println("password: " + password);
- System.out.println("clientid: " + clientId);
-
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("iot-mqtts.cn-north-4.myhuaweicloud.com")
- .port(8883)
- .username(username)
- .password(password)
- .clientId(clientId)
- .useSsl()
- .connectSync();
-
- // 订阅命令下发topic
- String cmdRequestTopic = "$oc/devices/" + deviceId + "/sys/commands/#";
-
- client.subQos0(cmdRequestTopic, (context, topic, message, payload) -> {
- System.out.println(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
- });
-
- // 属性上报消息
- String reportTopic = "$oc/devices/" + deviceId + "/sys/properties/report";
- String jsonMsg = "{\"services\":[{\"service_id\":\"Temperature\", \"properties\":{\"value\":57}},{\"service_id\":\"Battery\",\"properties\":{\"level\":88}}]}";
-
- client.schedule(() -> {
- client.publish(reportTopic, jsonMsg.getBytes(StandardCharsets.UTF_8));
- }, 3000);
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/huawei/MqttSign.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/huawei/MqttSign.java
deleted file mode 100644
index 9766d3a..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/huawei/MqttSign.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.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 org.dromara.mica.mqtt.huawei;
-
-import org.tio.utils.mica.DigestUtils;
-
-import java.time.Instant;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.Objects;
-
-/**
- * 华为云 mqtt 签名方式
- *
- * @author L.cm
- */
-public class MqttSign {
- /**
- * 用户名
- */
- private final String username;
- /**
- * 密码
- */
- private final String password;
- /**
- * 客户端id
- */
- private final String clientId;
-
- public MqttSign(String deviceId, String deviceSecret) {
- Objects.requireNonNull(deviceId, "deviceId is null");
- Objects.requireNonNull(deviceSecret, "deviceSecret is null");
- this.username = deviceId;
- String timestamp = getTimeStamp();
- this.password = getPassword(deviceSecret, timestamp);
- this.clientId = getClientId(deviceId, timestamp);
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public String getClientId() {
- return clientId;
- }
-
- private static String getPassword(String deviceSecret, String timestamp) {
- return hmacSha256(deviceSecret, timestamp);
- }
-
- private static String getClientId(String deviceId, String timestamp) {
- return deviceId + "_0_0_" + timestamp;
- }
-
- /***
- * 要求:10位数字
- */
- private static String getTimeStamp() {
- return ZonedDateTime.ofInstant(Instant.now(), ZoneId.of("UTC")).format(DateTimeFormatter.ofPattern("yyyyMMddHH"));
- }
-
- /***
- * 调用sha256算法进行哈希
- */
- private static String hmacSha256(String message, String tStamp) {
- return DigestUtils.hmacSha256Hex(message, tStamp);
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/nginx/MqttServerProxyProtocol.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/nginx/MqttServerProxyProtocol.java
deleted file mode 100644
index 2722d32..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/nginx/MqttServerProxyProtocol.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.nginx;
-
-
-import org.dromara.mica.mqtt.core.server.MqttServer;
-
-/**
- * mqtt 服务端测试
- *
- * @author L.cm
- */
-public class MqttServerProxyProtocol {
-
- public static void main(String[] args) {
- MqttServer.create()
- .enableMqtt()
- .enableMqttWs()
- // 开启代理协议
- .proxyProtocolEnable()
- .statEnable(false)
- .debug()
- .start();
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/proxy/MqttClientProxy.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/proxy/MqttClientProxy.java
deleted file mode 100644
index d2b3482..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/proxy/MqttClientProxy.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.proxy;
-
-import org.dromara.mica.mqtt.codec.MqttQoS;
-import org.dromara.mica.mqtt.core.client.MqttClient;
-
-/**
- * 2 个 mqtt 服务间,使用 2 个 client 做数据传输
- *
- * @author L.cm
- */
-public class MqttClientProxy {
-
- public static void main(String[] args) {
- MqttClient client1 = MqttClient.create()
- .ip("ip1")
- .port(1883)
- .clientId("clientI")
- .username("mica")
- .password("mica")
- .debug()
- .connectSync();
-
- MqttClient client2 = MqttClient.create()
- .ip("ip2")
- .port(1883)
- .clientId("client2")
- .username("mica")
- .password("mica")
- .debug()
- .connectSync();
-
- String[] topics = new String[]{
- "$share/test/link/product1/+/event/+/post",
- "$share/test/link/product2/+/event/+/post",
- "$share/test/link/product3/+/event/+/post"
- };
- client1.subscribe(topics, MqttQoS.QOS0, (context, topic, message, payload) -> {
- client2.publish(topic, payload);
- });
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/proxy/MqttServerProxy.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/proxy/MqttServerProxy.java
deleted file mode 100644
index 7026745..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/proxy/MqttServerProxy.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.proxy;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.dromara.mica.mqtt.core.server.MqttServer;
-import org.dromara.mica.mqtt.server.MqttConnectStatusListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.tio.utils.buffer.ByteBufferUtil;
-
-/**
- * mqtt 服务端代理到另外一个服务端
- *
- * @author L.cm
- */
-public class MqttServerProxy {
- private static final Logger logger = LoggerFactory.getLogger(MqttServerProxy.class);
-
- public static void main(String[] args) {
- // 需要将数据发往的服务端
- MqttClient client = MqttClient.create()
- .ip("ip")
- .port(1883)
- .clientId("proxy")
- .username("mica")
- .password("mcia")
- .debug()
- .connectSync();
- // 接受数据的服务端
- MqttServer.create()
- .messageListener((context, clientId, topic, qoS, message) -> {
- byte[] payload = message.payload();
- logger.info("clientId:{} topic:{} payload:\n{}", clientId, topic, ByteBufferUtil.toString(payload));
- // 转发数据
- client.publish(topic, payload);
- })
- // 开启 mqtt tcp 协议
- .enableMqtt()
- // 开启 mqtt websocket
- .enableMqttWs()
- // 开启 http api 接口
- .enableMqttHttpApi()
- // 客户端连接状态监听
- .connectStatusListener(new MqttConnectStatusListener())
- // 开始 stat 监控
- .statEnable()
- // 开启 debug 信息日志
- .debug()
- .start();
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttConnectStatusListener.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttConnectStatusListener.java
deleted file mode 100644
index e094afe..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttConnectStatusListener.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.server;
-
-import org.dromara.mica.mqtt.core.server.event.IMqttConnectStatusListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.tio.core.ChannelContext;
-
-/**
- * mqtt 连接状态
- *
- * @author L.cm
- */
-public class MqttConnectStatusListener implements IMqttConnectStatusListener {
- private static final Logger logger = LoggerFactory.getLogger(MqttConnectStatusListener.class);
-
- @Override
- public void online(ChannelContext context, String clientId, String username) {
- logger.info("Mqtt clientId:{} username:{} online.", clientId, username);
- }
-
- @Override
- public void offline(ChannelContext context, String clientId, String username, String reason) {
- logger.info("Mqtt clientId:{} username:{} offline reason:{}.", clientId, username, reason);
- }
-
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttMessageInterceptor.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttMessageInterceptor.java
deleted file mode 100644
index 55e693c..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttMessageInterceptor.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.server;
-
-import org.dromara.mica.mqtt.codec.message.MqttMessage;
-import org.dromara.mica.mqtt.core.server.interceptor.IMqttMessageInterceptor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.tio.core.ChannelContext;
-import org.tio.core.Node;
-
-/**
- * mqtt 消息拦截器
- *
- * @author L.cm
- */
-public class MqttMessageInterceptor implements IMqttMessageInterceptor {
- private static final Logger logger = LoggerFactory.getLogger(MqttMessageInterceptor.class);
-
- @Override
- public void onAfterReceivedBytes(ChannelContext context, int receivedBytes) throws Exception {
- // 注意:此时 clientId 可能为空
- String clientId = context.getBsId();
- Node clientNode = context.getClientNode();
- // ChannelStat channelStat = context.stat;
- // 自定义规则,超限是可用 Tio.remove(context, "xxx超限"); 断开连接。
- logger.info("===接收 client:{} clientId:{} data:{}b", clientNode, clientId, receivedBytes);
- }
-
- @Override
- public void onAfterDecoded(ChannelContext context, MqttMessage message, int packetSize) {
- // 注意:此时 clientId 可能为空
- String clientId = context.getBsId();
- Node clientNode = context.getClientNode();
- logger.info("===解码 client:{} clientId:{} message:{}", clientNode, clientId, message);
- }
-
- @Override
- public void onAfterHandled(ChannelContext context, MqttMessage message, long cost) throws Exception {
- String clientId = context.getBsId();
- Node clientNode = context.getClientNode();
- logger.info("===处理完成 ip:{} clientId:{} message:{} 耗时:{}", clientNode, clientId, message, cost);
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttServerTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttServerTest.java
deleted file mode 100644
index 84003b1..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/server/MqttServerTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.server;
-
-import org.dromara.mica.mqtt.core.server.MqttServer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * mqtt 服务端测试
- *
- * @author L.cm
- */
-public class MqttServerTest {
- private static final Logger logger = LoggerFactory.getLogger(MqttServerTest.class);
-
- public static void main(String[] args) {
- // 注意:为了能接受更多链接(降低内存),请添加 jvm 参数 -Xss129k
- MqttServer mqttServer = MqttServer.create()
- // 服务端 ip 默认为空,0.0.0.0,建议不要设置,端口 默认:1883
- .enableMqtt(1883)
- // 默认为: 8192(mqtt 默认最大消息大小),为了降低内存可以减小小此参数,如果消息过大 t-io 会尝试解析多次(建议根据实际业务情况而定)
- .readBufferSize(8192)
-// 最大包体长度
-// .maxBytesInMessage(1024 * 100)
-// mqtt 3.1 协议会校验 clientId 长度。
-// .maxClientIdLength(64)
- .messageListener((context, clientId, topic, qos, message) -> {
- logger.info("clientId:{} payload:{}", clientId, new String(message.payload(), StandardCharsets.UTF_8));
- })
- // 客户端连接状态监听
- .connectStatusListener(new MqttConnectStatusListener())
- // 自定义消息拦截器
- .addInterceptor(new MqttMessageInterceptor())
- // 开启 websocket
- .enableMqttWs()
- // 开启 mqtt http 接口
- .enableMqttHttpApi(builder ->
- builder
- .basicAuth("mica", "mica") // http basic 认证
- .mcpServer() // 开启 mcp 服务
- .build()
- )
- // 开始 stat 监控
- .statEnable()
- // 开启 debug 信息日志
- .debug()
- .start();
-
- mqttServer.schedule(() -> {
- String message = "mica最牛皮 " + System.currentTimeMillis();
- mqttServer.publishAll("/test/123", message.getBytes(StandardCharsets.UTF_8));
- }, 2000);
-
- // 2.3.2 开始支持 stop 关闭
-// mqttServer.stop();
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/ssl/SslMqttClientTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/ssl/SslMqttClientTest.java
deleted file mode 100644
index 2940d9a..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/ssl/SslMqttClientTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.ssl;
-
-import org.dromara.mica.mqtt.core.client.MqttClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.tio.utils.buffer.ByteBufferUtil;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 客户端测试
- *
- * @author L.cm
- */
-public class SslMqttClientTest {
- private static final Logger logger = LoggerFactory.getLogger(SslMqttClientTest.class);
-
- public static void main(String[] args) {
- // 初始化 mqtt 客户端
- MqttClient client = MqttClient.create()
- .ip("127.0.0.1")
- .port(8883)
- .username("mica")
- .password("mica")
- .useSsl("classpath:ssl/dreamlu.net.jks", "123456")
- .connectSync();
-
- client.subQos0("/test/#", (context, topic, message, payload) -> {
- logger.info(topic + '\t' + ByteBufferUtil.toString(payload));
- });
-
- // 定时发送数据
- client.schedule(() -> {
- String message = "mica最牛皮 " + System.currentTimeMillis();
- client.publish("/test/123", message.getBytes(StandardCharsets.UTF_8));
- }, 5000);
- }
-}
diff --git a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/ssl/SslMqttServerTest.java b/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/ssl/SslMqttServerTest.java
deleted file mode 100644
index 3f19cde..0000000
--- a/example/mica-mqtt-example/src/main/java/org/dromara/mica/mqtt/ssl/SslMqttServerTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.ssl;
-
-import org.dromara.mica.mqtt.core.server.MqttServer;
-import org.dromara.mica.mqtt.server.MqttConnectStatusListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.tio.utils.buffer.ByteBufferUtil;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * mqtt 服务端测试
- *
- * @author L.cm
- */
-public class SslMqttServerTest {
- private static final Logger logger = LoggerFactory.getLogger(SslMqttServerTest.class);
-
- public static void main(String[] args) {
- MqttServer mqttServer = MqttServer.create()
- .enableMqttSsl(builder ->
- builder.useSsl("classpath:ssl/dreamlu.net.jks", "123456")
- .build()
- )
- .messageListener((context, clientId, topic, qoS, message) -> {
- logger.info("clientId:{} message:{} payload:{}", clientId, message, ByteBufferUtil.toString(message.payload()));
- })
- .connectStatusListener(new MqttConnectStatusListener())
- .debug()
- .start();
-
- // 定时发送数据
- mqttServer.schedule(() -> {
- String message = "mica最牛皮 " + System.currentTimeMillis();
- mqttServer.publishAll("/test/123", message.getBytes(StandardCharsets.UTF_8));
- }, 5000);
- }
-}
diff --git a/example/mica-mqtt-example/src/main/resources/ssl/README.md b/example/mica-mqtt-example/src/main/resources/ssl/README.md
deleted file mode 100644
index 97ff3c5..0000000
--- a/example/mica-mqtt-example/src/main/resources/ssl/README.md
+++ /dev/null
@@ -1 +0,0 @@
-ssl 自签双向证书详见:https://gitee.com/596392912/mica-mqtt/issues/I45GO7
\ No newline at end of file
diff --git a/example/mica-mqtt-example/src/main/resources/ssl/ca-cert.pem b/example/mica-mqtt-example/src/main/resources/ssl/ca-cert.pem
deleted file mode 100644
index 02a10df..0000000
--- a/example/mica-mqtt-example/src/main/resources/ssl/ca-cert.pem
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICejCCAeMCFGkzqgl8ilICj+PRCwIiUy3dPNuWMA0GCSqGSIb3DQEBCwUAMHwx
-CzAJBgNVBAYTAkNOMQswCQYDVQQIDAJITjELMAkGA1UEBwwCQ1MxDTALBgNVBAoM
-BFJNSlMxDTALBgNVBAsMBFJNSlMxFDASBgNVBAMMC2RyZWFtbHUubmV0MR8wHQYJ
-KoZIhvcNAQkBFhA1OTYzOTI5MTJAcXEuY29tMB4XDTIyMDkwMzA4MjExNVoXDTMy
-MDgzMTA4MjExNVowfDELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkhOMQswCQYDVQQH
-DAJDUzENMAsGA1UECgwEUk1KUzENMAsGA1UECwwEUk1KUzEUMBIGA1UEAwwLZHJl
-YW1sdS5uZXQxHzAdBgkqhkiG9w0BCQEWEDU5NjM5MjkxMkBxcS5jb20wgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAJxanDadRHd+D9jH5/mq7Pn3Fl915CiOaaJr
-QS0ZxCqRtTaS9+JkFQJ4TnAezlKx/xDZu7G9pk7CJ6w+JQwfI+AwsAkOlrynyFbe
-Hc9s6DZyZHXxkpgeQUqpnrkXkWG+jbh2aulWB4smQE/vPnpkjVGEe86+/JsYW3Sm
-rFhL2xddAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAP39PM0XpNzg3Bne63oXHRWDJ
-bafiCwloO/SaxH7JtCBj1I05W3owwHSqWYadK+lg//tKf6TL+94GtW8s2VtpLGu7
-Y5R2aakhywzbWVfrEK+kyvTG/4nP9tvcKwh8Iqr2XlllDLfsQeyLacb4+pcfDY3G
-8nrbe0lBKepae8D0SvQ=
------END CERTIFICATE-----
diff --git a/example/mica-mqtt-example/src/main/resources/ssl/client-cert.pem b/example/mica-mqtt-example/src/main/resources/ssl/client-cert.pem
deleted file mode 100644
index 3d4d140..0000000
--- a/example/mica-mqtt-example/src/main/resources/ssl/client-cert.pem
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN CERTIFICATE-----
-MIICejCCAeMCFBebamYN4nfF0CrZWuN68SXxTH/GMA0GCSqGSIb3DQEBCwUAMHwx
-CzAJBgNVBAYTAkNOMQswCQYDVQQIDAJITjELMAkGA1UEBwwCQ1MxDTALBgNVBAoM
-BFJNSlMxDTALBgNVBAsMBFJNSlMxFDASBgNVBAMMC2RyZWFtbHUubmV0MR8wHQYJ
-KoZIhvcNAQkBFhA1OTYzOTI5MTJAcXEuY29tMB4XDTIyMDkwMzA4MjM1N1oXDTMy
-MDgzMTA4MjM1N1owfDELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkhOMQswCQYDVQQH
-DAJDUzENMAsGA1UECgwEUk1KUzENMAsGA1UECwwEUk1KUzEUMBIGA1UEAwwLZHJl
-YW1sdS5uZXQxHzAdBgkqhkiG9w0BCQEWEDU5NjM5MjkxMkBxcS5jb20wgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAL3hH0vRYCsqs79ghUPskgr+bQyVkO/6U1H1
-4yHJWyWeXT2tl+VTvXhou0Zk3yYtd6O3l241PgmAjwBDPyfmM2UU/zluXQzELEuf
-AnC4Q2wl0vpoj7mGQeMuRpjZN3FblS0bRifvctx3ubWVvSzCFIaKLZgdrnyWm5Lm
-kJQjRaEDAgMBAAEwDQYJKoZIhvcNAQELBQADgYEAkm/Mv9nEGE4xy3L4NmwgyZMo
-j5CuarbCEv/MgXST8B/dJvtC7PbCzrb9BbUkiIUjCOnRC+2U0DbSAkHy7CCwHTLx
-g9Syn1SMWn9SF74l74qVtuaRjMKCGwSlqBLH5/t1FdPoevY2a+zi5dAqwIhkjY84
-uYOgxODe+kFBUbT6W3A=
------END CERTIFICATE-----
diff --git a/example/mica-mqtt-example/src/main/resources/ssl/client-key.pem b/example/mica-mqtt-example/src/main/resources/ssl/client-key.pem
deleted file mode 100644
index 429c7d3..0000000
--- a/example/mica-mqtt-example/src/main/resources/ssl/client-key.pem
+++ /dev/null
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQC94R9L0WArKrO/YIVD7JIK/m0MlZDv+lNR9eMhyVslnl09rZfl
-U714aLtGZN8mLXejt5duNT4JgI8AQz8n5jNlFP85bl0MxCxLnwJwuENsJdL6aI+5
-hkHjLkaY2TdxW5UtG0Yn73Lcd7m1lb0swhSGii2YHa58lpuS5pCUI0WhAwIDAQAB
-AoGAR/T8azsZesJgA/KMDkWkws3QfahgmNEAqlrIjJFGHWd6ZllW6u1lLDBkaDTp
-7AnnAQAePwGmVOuHRc42LOSsLMX/D2wYsTGjLTT1w+fEDkQCVnDKV8ZYWA5fN7Zh
-m5cLB5IB23L/Xvs8UMYQ8qWufv6BxVPr+cawtXOK3O91AoECQQD5PwGSrMpsNkVG
-Ox1t1A9wVgelbq+9qANPl8TvdaZKvNsbWwI0PRqK7D1SJXJiMX4m/hc8YkIXJWsO
-Wd1yLg6TAkEAwwZLncJYlYOp0v8PXk75rDR7KV9fdBPPOdnZ1XU/yFW3anwOt0OX
-LvGL3X0A2f/tqOX9v+3LENCICF4gAv850QJBALo7Yal+giEoy8oWEX8mnAKLxVrO
-wXEsQI0QEY36ki31vqFJ9vOhVFvI+GiQok7MPD5WTHZJ1KgGxV8LtnLCBxECQCPD
-WcZ6RyhT1qaco0LWFK7hiNxTYvu0TkH7kxizwZiJL3NVgJVWzbiMDuv06l0Ps5NP
-abLydlSFCQ0PxasHBqECQQC0lhmqkNbaN3lJyGDoEWm6Kb9z3eh3+9Fk4j328aYW
-gQcBeRhKU8kdDTg2flOWS3sxrEysJYv8i9DPbX9RsRFd
------END RSA PRIVATE KEY-----
diff --git a/example/mica-mqtt-example/src/main/resources/ssl/dreamlu.net.jks b/example/mica-mqtt-example/src/main/resources/ssl/dreamlu.net.jks
deleted file mode 100644
index 92f7b93..0000000
Binary files a/example/mica-mqtt-example/src/main/resources/ssl/dreamlu.net.jks and /dev/null differ
diff --git a/example/mica-mqtt-example/src/main/resources/tinylog.properties b/example/mica-mqtt-example/src/main/resources/tinylog.properties
deleted file mode 100644
index 571bd73..0000000
--- a/example/mica-mqtt-example/src/main/resources/tinylog.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-writer = console
-writer.format = {date: HH:mm:ss.SSS} [{thread}] {level} {class-name}.{method} : {message}
-writer.level = info
-# level
-level@org.tio = warn
-level@org.tio.client.TioClient = off
-level@org.tio.server = info
-level@org.dromara.mica.mqtt = info
diff --git a/example/mica-mqtt-example/src/test/java/net/dreamlu/iot/package-info.java b/example/mica-mqtt-example/src/test/java/net/dreamlu/iot/package-info.java
deleted file mode 100644
index 247a0c9..0000000
--- a/example/mica-mqtt-example/src/test/java/net/dreamlu/iot/package-info.java
+++ /dev/null
@@ -1 +0,0 @@
-package net.dreamlu.iot;
diff --git a/example/mica-mqtt-example/src/test/resources/test.yml b/example/mica-mqtt-example/src/test/resources/test.yml
deleted file mode 100644
index e69de29..0000000
diff --git a/example/mica-mqtt-server-solon-plugin-example/pom.xml b/example/mica-mqtt-server-solon-plugin-example/pom.xml
deleted file mode 100644
index 0699a06..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
- 4.0.0
-
- org.dromara.mica-mqtt
- example
- ${revision}
-
-
- mica-mqtt-server-solon-plugin-example
-
-
-
- org.noear
- solon-web
-
-
- org.dromara.mica-mqtt
- mica-mqtt-server-solon-plugin
-
-
-
- org.noear
- solon-scheduling-simple
-
-
- org.noear
- solon-logging-simple
-
-
-
- org.noear
- solon-cloud-metrics
-
-
- io.micrometer
- micrometer-registry-prometheus
-
-
-
- org.projectlombok
- lombok
- provided
-
-
-
-
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/MqttServerApplication.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/MqttServerApplication.java
deleted file mode 100644
index e5ced68..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/MqttServerApplication.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.dromara.mica.mqtt.server.solon;
-
-
-import org.noear.solon.Solon;
-import org.noear.solon.annotation.Configuration;
-import org.noear.solon.scheduling.annotation.EnableScheduling;
-
-/**
- * @author wsq
- */
-@Configuration
-@EnableScheduling
-public class MqttServerApplication {
-
- public static void main(String[] args) {
- Solon.start(MqttServerApplication.class, args);
- }
-
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/controller/ServerController.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/controller/ServerController.java
deleted file mode 100644
index f28ff11..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/controller/ServerController.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.dromara.mica.mqtt.server.solon.controller;
-
-
-import org.dromara.mica.mqtt.server.solon.service.ServerService;
-import org.noear.solon.annotation.Controller;
-import org.noear.solon.annotation.Inject;
-import org.noear.solon.annotation.Mapping;
-import org.noear.solon.annotation.Post;
-
-@Mapping("/mqtt/server")
-@Controller
-public class ServerController {
- @Inject
- private ServerService service;
-
- @Mapping("publish")
- @Post
- public boolean publish(String body) {
- return service.publish(body);
- }
-
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttConnectOfflineListener.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttConnectOfflineListener.java
deleted file mode 100644
index 1c7ad35..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttConnectOfflineListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.server.solon.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.server.solon.event.MqttClientOfflineEvent;
-import org.noear.solon.annotation.Component;
-import org.noear.solon.core.event.EventListener;
-
-/**
- * mqtt 连接状态,使用 solon event 方式,性能有损耗
- *
- * @author L.cm
- */
-@Slf4j
-@Component
-public class MqttConnectOfflineListener implements EventListener {
-
- @Override
- public void onEvent(MqttClientOfflineEvent mqttClientOfflineEvent) throws Throwable {
- log.info("MqttClientOnlineEvent:{}", mqttClientOfflineEvent);
- }
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttConnectOnlineListener.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttConnectOnlineListener.java
deleted file mode 100644
index 1b81cd7..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttConnectOnlineListener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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 org.dromara.mica.mqtt.server.solon.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.server.solon.event.MqttClientOnlineEvent;
-import org.noear.solon.annotation.Component;
-import org.noear.solon.core.event.EventListener;
-
-/**
- * mqtt 连接状态,使用 solon event 方式,性能有损耗
- *
- * @author L.cm
- */
-@Slf4j
-@Component
-public class MqttConnectOnlineListener implements EventListener {
-
- @Override
- public void onEvent(MqttClientOnlineEvent mqttClientOnlineEvent) throws Throwable {
- log.info("MqttClientOnlineEvent:{}", mqttClientOnlineEvent);
- }
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttServerMessageListener1.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttServerMessageListener1.java
deleted file mode 100644
index 48523ca..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttServerMessageListener1.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.dromara.mica.mqtt.server.solon.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.codec.message.MqttPublishMessage;
-import org.dromara.mica.mqtt.codec.MqttQoS;
-import org.dromara.mica.mqtt.core.server.event.IMqttMessageListener;
-import org.tio.core.ChannelContext;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * 消息监听器示例1,直接实现 IMqttMessageListener,注意:如果实现了 IMqttMessageListener,MqttServerFunction 注解就不生效了。
- *
- * @author wsq
- */
-@Slf4j
-//@Component
-public class MqttServerMessageListener1 implements IMqttMessageListener {
-
- @Override
- public void onMessage(ChannelContext context, String clientId, String topic, MqttQoS qos, MqttPublishMessage message) {
- log.info("context:{} clientId:{} message:{} payload:{}", context, clientId, message, new String(message.payload(), StandardCharsets.UTF_8));
- }
-
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttServerMessageListener2.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttServerMessageListener2.java
deleted file mode 100644
index 7b31709..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/listener/MqttServerMessageListener2.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.dromara.mica.mqtt.server.solon.listener;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.codec.message.MqttPublishMessage;
-import org.dromara.mica.mqtt.core.annotation.MqttServerFunction;
-import org.dromara.mica.mqtt.server.solon.pojo.User;
-import org.noear.solon.annotation.Component;
-import org.tio.core.ChannelContext;
-import org.tio.core.Node;
-
-import java.util.Map;
-
-/**
- * 消息监听器示例2,MqttServerFunction 注解订阅,注意:如果自行实现了 IMqttMessageListener,MqttServerFunction 注解就不生效了。
- *
- * @author L.cm
- */
-@Slf4j
-@Component
-public class MqttServerMessageListener2 {
-
- @MqttServerFunction("/test/object")
- public void func1(String topic, User> user) {
- log.info("topic:{} user:{}", topic, user);
- }
-
- @MqttServerFunction("/test/client")
- public void func1(String topic, byte[] message) {
- log.info("topic:{} message:{}", topic, new String(message));
- }
-
- /**
- * MQTT消息处理函数,匹配 mqtt Topic /test/+,如何需要匹配所以消息,请使用通配符 #
- *
- * @param context ChannelContext,可选参数
- * @param topic 实际接收到消息的主题名称,可选参数
- * @param topicVars topic 中的 ${xxxx} 变量解析(v2.5.4支持),可选参数,注意:类型必须为 Map
- * @param publishMessage 完整的MQTT发布消息对象,包含消息头和负载,可选参数
- * @param message 消息负载内容,以字节数组形式提供,可选参数,也可支持对象形式,默认 json 序列化
- */
- @MqttServerFunction("/test/${xxxx}")
- public void func3(ChannelContext context, String topic, Map topicVars, MqttPublishMessage publishMessage, byte[] message) {
- // 获取客户端节点信息
- Node clientNode = context.getClientNode();
- // 记录接收到的MQTT消息信息
- log.info("clientNode:{} topic:{} topicVars:{} publishMessage:{} message:{}", clientNode, topic, topicVars, publishMessage, new String(message));
- }
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/pojo/User.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/pojo/User.java
deleted file mode 100644
index c1d7f3c..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/pojo/User.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.dromara.mica.mqtt.server.solon.pojo;
-
-import lombok.Data;
-
-@Data
-public class User {
- private String name;
- private T girlfriend;
-
- public static User newUser(){
- User user1 = new User();
- user1.setName("name1");
-
- User user2 = new User();
- user2.setName("name2");
- user2.setGirlfriend(user1);
- return user2;
- }
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/service/ServerService.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/service/ServerService.java
deleted file mode 100644
index 76da077..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/service/ServerService.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.dromara.mica.mqtt.server.solon.service;
-
-import lombok.extern.slf4j.Slf4j;
-import org.dromara.mica.mqtt.server.solon.MqttServerTemplate;
-import org.noear.solon.annotation.Component;
-import org.noear.solon.annotation.Inject;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * @author wsq
- */
-@Slf4j
-@Component
-public class ServerService {
- @Inject
- private MqttServerTemplate server;
-
- public boolean publish(String body) {
- boolean result = server.publishAll("/test/123", body.getBytes(StandardCharsets.UTF_8));
- log.info("Mqtt publishAll result:{}", result);
- return result;
- }
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/task/PublishTask.java b/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/task/PublishTask.java
deleted file mode 100644
index 196df4d..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/java/org/dromara/mica/mqtt/server/solon/task/PublishTask.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.dromara.mica.mqtt.server.solon.task;
-
-import org.dromara.mica.mqtt.server.solon.MqttServerTemplate;
-import org.dromara.mica.mqtt.server.solon.pojo.User;
-import org.noear.solon.annotation.Component;
-import org.noear.solon.annotation.Inject;
-import org.noear.solon.scheduling.annotation.Scheduled;
-
-import java.nio.charset.StandardCharsets;
-
-/**
- * @author wsq
- */
-@Component
-public class PublishTask {
- @Inject
- private MqttServerTemplate mqttServerTemplate;
-
- @Scheduled(fixedDelay = 1000)
- public void publish() {
- mqttServerTemplate.publishAll("/test/123", "mica最牛皮".getBytes(StandardCharsets.UTF_8));
- mqttServerTemplate.publishAll("/test/object", User.newUser());
- }
-
-}
diff --git a/example/mica-mqtt-server-solon-plugin-example/src/main/resources/app.yml b/example/mica-mqtt-server-solon-plugin-example/src/main/resources/app.yml
deleted file mode 100644
index 086a123..0000000
--- a/example/mica-mqtt-server-solon-plugin-example/src/main/resources/app.yml
+++ /dev/null
@@ -1,54 +0,0 @@
-# solon 配置
-solon:
- logging:
- appender:
- console:
- level: INFO
-# mqtt 服务端配置
-mqtt:
- server:
- enabled: true # 是否开启服务端,默认:true
- name: Mica-Mqtt-Server # 名称,默认:Mica-Mqtt-Server
- heartbeat-timeout: 120000 # 心跳超时,单位毫秒,默认: 1000 * 120
- read-buffer-size: 8KB # 接收数据的 buffer size,默认:8k
- max-bytes-in-message: 10MB # 消息解析最大 bytes 长度,默认:10M
- auth:
- enable: false # 是否开启 mqtt 认证
- username: mica # mqtt 认证用户名
- password: mica # mqtt 认证密码
- debug: true # 如果开启 prometheus 指标收集建议关闭
- stat-enable: true # 开启指标收集,debug 和 prometheus 开启时需要打开,默认开启,关闭节省内存
- mqtt-listener: # mqtt 监听器
- enable: true # 是否开启,默认:false
- # ip: "0.0.0.0" # 服务端 ip 默认为空,0.0.0.0,建议不要设置
- port: 1883 # 端口,默认:1883
- mqtt-ssl-listener: # mqtt ssl 监听器
- enable: false # 是否开启,默认:false
- port: 8883 # 端口,默认:8883
- ssl: # ssl 配置,必须
- keystore-path: # 必须参数:ssl keystore 目录,支持 classpath:/ 路径。
- keystore-pass: # 必选参数:ssl keystore 密码
- truststore-path: # 可选参数:ssl 双向认证 truststore 目录,支持 classpath:/ 路径。
- truststore-pass: # 可选参数:ssl 双向认证 truststore 密码
- client-auth: none # 是否需要客户端认证(双向认证),默认:NONE(不需要)
- ws-listener: # websocket mqtt 监听器
- enable: true # 是否开启,默认:false
- port: 8083 # websocket 端口,默认:8083
- wss-listener: # websocket ssl mqtt 监听器
- enable: false # 是否开启,默认:false
- port: 8084 # 端口,默认:8084
- ssl: # ssl 配置,必须
- keystore-path: # 必须参数:ssl keystore 目录,支持 classpath:/ 路径。
- keystore-pass: # 必选参数:ssl keystore 密码
- truststore-path: # 可选参数:ssl 双向认证 truststore 目录,支持 classpath:/ 路径。
- truststore-pass: # 可选参数:ssl 双向认证 truststore 密码
- client-auth: none # 是否需要客户端认证(双向认证),默认:NONE(不需要)
- http-listener:
- enable: true
- port: 18083
- basic-auth: # 基础认证
- enable: true
- username: mica
- password: mica
- mcp-server: # 大模型 mcp
- enable: true
diff --git a/example/mica-mqtt-server-spring-boot-example/src/main/resources/application.yml b/example/mica-mqtt-server-spring-boot-example/src/main/resources/application.yml
index d81f8a9..fc1ece3 100644
--- a/example/mica-mqtt-server-spring-boot-example/src/main/resources/application.yml
+++ b/example/mica-mqtt-server-spring-boot-example/src/main/resources/application.yml
@@ -25,6 +25,8 @@ spring:
#原生配置
configuration:
map-underscore-to-camel-case: true
+ #打印日志
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# mqtt 服务端配置
mqtt:
diff --git a/example/pom.xml b/example/pom.xml
index 4ff4dde..10ae7d5 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -24,11 +24,8 @@
- mica-mqtt-example
mica-mqtt-client-spring-boot-example
mica-mqtt-server-spring-boot-example
- mica-mqtt-client-solon-plugin-example
- mica-mqtt-server-solon-plugin-example