|
4 bulan lalu | |
---|---|---|
.. | ||
mqtt-spring-boot-starter | 4 bulan lalu | |
src | 4 bulan lalu | |
README.md | 4 bulan lalu | |
pom.xml | 4 bulan lalu |
一个基于 Spring Boot 的 MQTT 客户端启动器,提供了简单易用的 MQTT 消息发布订阅功能。
<dependency>
<groupId>cn.hfln.framework</groupId>
<artifactId>mqtt-spring-boot-starter</artifactId>
<version>${latest.version}</version>
</dependency>
在 application.yml
中添加以下配置:
mqtt:
enabled: true
broker: tcp://localhost:1883
client-id: ${spring.application.name}
username: your-username
password: your-password
timeout: 30
keepalive: 60
clean-session: true
automatic-reconnect: true
max-reconnect-delay: 10000
connection-timeout: 30
max-message-size: 1048576
ssl: false
# SSL 配置(如果需要)
ssl-ca-path: /path/to/ca.crt
ssl-client-cert-path: /path/to/client.crt
ssl-client-key-path: /path/to/client.key
ssl-client-key-password: your-key-password
@Autowired
private MqttTemplate mqttTemplate;
// 发送字符串消息
mqttTemplate.send("test/topic", "Hello MQTT!");
// 发送 JSON 消息
TestMessage message = new TestMessage("test", 123);
mqttTemplate.sendJson("test/json", message);
@Component
public class MqttMessageHandler {
@MqttSubscribe(topic = "test/+/topic")
public void handleStringMessage(String message) {
System.out.println("Received message: " + message);
}
@MqttSubscribe(topic = "test/json")
public void handleJsonMessage(TestMessage message) {
System.out.println("Received JSON message: " + message);
}
}
@Component
public class CustomMqttMessageInterceptor implements MqttMessageInterceptor {
@Override
public boolean preSend(String topic, MqttMessage message) {
// 发送消息前的处理
return true;
}
@Override
public void postSend(String topic, MqttMessage message) {
// 发送消息后的处理
}
@Override
public boolean preReceive(String topic, MqttMessage message) {
// 接收消息前的处理
return true;
}
@Override
public void postReceive(String topic, MqttMessage message) {
// 接收消息后的处理
}
}
@Component
public class CustomMqttConnectionListener implements MqttConnectionListener {
@Override
public void onConnected() {
System.out.println("MQTT client connected");
}
@Override
public void onDisconnected() {
System.out.println("MQTT client disconnected");
}
@Override
public void onConnectionLost(Throwable cause) {
System.out.println("MQTT connection lost: " + cause.getMessage());
}
}
支持 MQTT 通配符主题订阅:
+
:匹配单层任意字符#
:匹配多层任意字符示例:
@MqttSubscribe(topic = "test/+/topic") // 匹配 test/1/topic, test/2/topic 等
@MqttSubscribe(topic = "test/#") // 匹配 test/ 下的所有主题
支持自动的 JSON 消息转换:
@MqttSubscribe(topic = "test/json")
public void handleJsonMessage(TestMessage message) {
// message 会自动从 JSON 转换为 TestMessage 对象
}
支持异步消息发送:
mqttTemplate.send("test/topic", "Hello MQTT!")
.thenRun(() -> System.out.println("Message sent successfully"))
.exceptionally(throwable -> {
System.out.println("Failed to send message: " + throwable.getMessage());
return null;
});
配置项 | 说明 | 默认值 |
---|---|---|
mqtt.enabled | 是否启用 MQTT | true |
mqtt.broker | MQTT 服务器地址 | - |
mqtt.client-id | 客户端 ID | ${spring.application.name} |
mqtt.username | 用户名 | - |
mqtt.password | 密码 | - |
mqtt.timeout | 超时时间(秒) | 30 |
mqtt.keepalive | 保活时间(秒) | 60 |
mqtt.clean-session | 是否清除会话 | true |
mqtt.automatic-reconnect | 是否自动重连 | true |
mqtt.max-reconnect-delay | 最大重连延迟(毫秒) | 10000 |
mqtt.connection-timeout | 连接超时时间(秒) | 30 |
mqtt.max-message-size | 最大消息大小(字节) | 1048576 |
mqtt.ssl | 是否启用 SSL | false |
mqtt.ssl-ca-path | CA 证书路径 | - |
mqtt.ssl-client-cert-path | 客户端证书路径 | - |
mqtt.ssl-client-key-path | 客户端密钥路径 | - |
mqtt.ssl-client-key-password | 客户端密钥密码 | - |
连接失败
消息发送失败
消息接收失败
欢迎提交 Issue 和 Pull Request。
本项目采用 MIT 许可证。