添加 MQTT 客户端依赖
在 Spring Boot 项目的 pom.xml 中添加 Eclipse Paho MQTT 客户端依赖(主流的 MQTT Java 客户端):
<!-- MQTT 客户端 -->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
配置 MQTT 连接参数
在 application.yml(或 application.properties)中配置 Mosquitto 连接信息:
mqtt:
# 是否启用
enable: true
# Mosquitto 服务地址(非加密端口),若启用 TLS 加密,使用 ssl://localhost:8883
broker: tcp://localhost:1883
# 客户端唯一标识(建议加随机数避免冲突)
client-id: springboot-mqtt-client
# 认证用户名(Mosquitto 启用认证时必填)
username: user1
# 认证密码
password: 123456
# 默认 QoS 等级(0/1/2)
default-qos: 1
# 心跳间隔(秒)
keep-alive: 60
实现 MQTT 客户端(发布 + 订阅)
MQTT 客户端配置类
配置类
import lombok.extern.slf4j.Slf4j;
org.eclipse.paho.client.mqttv3.*;
org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
org.springframework.context.annotation.Bean;
org.springframework.context.annotation.Configuration;
org.springframework.util.StringUtils;
{
MqttProperties mqttProp;
{
.mqttProp = mqttProp;
}
MqttClient MqttException {
mqttProp.getClientId() + + System.currentTimeMillis();
(mqttProp.getBroker(), clientIdWithRandom, ());
();
(StringUtils.hasText(mqttProp.getUsername())) {
options.setUserName(mqttProp.getUsername());
}
(StringUtils.hasText(mqttProp.getPassword())) {
options.setPassword(mqttProp.getPassword().toCharArray());
}
options.setKeepAliveInterval(mqttProp.getKeepAlive());
options.setAutomaticReconnect();
options.setCleanSession();
client.setCallback( () {
{
log.error(, cause.getMessage());
}
Exception {
(message.getPayload());
log.debug(, topic, content);
}
{
{
log.debug(, token.getTopics()[]);
} (Exception e) {
log.error(, e);
}
}
});
client.connect(options);
log.info(, mqttProp.getClientId());
client;
}
}


