今天遇到了一个mqtt的问题,虽然解决了,但是感觉不是很好,希望大家多指点
这是配置文件
customer:
mqtt:
broker: tcp://ip:1883
clientList:
- clientId: nays_service
subscribeTopic: xxxxxx
- clientId: receive_service
subscribeTopic: xxxxxx
MqttConfig 读取配置文件的
@Data
@Configuration
@ConfigurationProperties(prefix = "customer.mqtt")
public class MqttConfig {
/**
* mqtt broker地址
*/
String broker;
/**
* 需要创建的MQTT客户端
*/
List<MqttClient> clientList;
}
一个MqttClient类用来构造配置文件中的数据对象
@Data
public class MqttClient {
/**
* 客户端ID
*/
private String clientId;
/**
* 监听主题
*/
private String subscribeTopic;
/**
* 用户名
*/
private String userName;
/**
* 密码
*/
private String password;
}
服务运行的时候进行mqtt客户端创建,创建的数据从配置文件中读取
/**
* MQTT客户端创建
*/
@Component
@Slf4j
public class MqttClientCreate {
@Resource
private MqttClientManager mqttClientManager;
@Resource
private MqttConfig mqttConfig;
/**
* 创建MQTT客户端
*/
@PostConstruct
public void createMqttClient() {
// 会读取配置文件中的clientList
List<MqttClient> mqttClientList = mqttConfig.getClientList();
// 遍历去创建
for (MqttClient mqttClient : mqttClientList) {
log.info("{}", mqttClient);
mqttClientManager.createMqttClient(mqttClient.getClientId(), mqttClient.getSubscribeTopic());
}
}
}
这是创建的代码,问题很多(请看代码的注释部分)
```java
@Slf4j
@Component
public class MqttClientManager {
@Value("${customer.mqtt.broker}")
private String mqttBrok