引入依赖
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
<scope>compile</scope>
</dependency>
创建MQTT
@Value("${mqtt.server-url}")
private String serverURI;
@Value("${mqtt.client-id:}")
private String clientId;
@Value("${mqtt.enabled:true}")
private Boolean enabled;
@Value("${mqtt.user-name:server}")
private String userName;
@Value("${mqtt.password}")
private String password;
private MqttAsyncClient mqttAsyncClient;
@Bean
public MqttAsyncClient initMqttClient() {
MemoryPersistence persistence = new MemoryPersistence();
try {
//当未设置标识时随机一个
if (StringUtils.isEmpty(clientId)) {
clientId = UUID.randomUUID().toString().replace("-", "");
}
mqttAsyncClient = new MqttAsyncClient(serverURI, clientId, persistence);
// MQTT 连接选项
MqttConnectOptions connOpts = new MqttConnectOptions();
//设置MQTT连接账号密码
connOpts.setUserName(userName);
connOpts.setPassword(password.toCharArray());
// 保留会话
connOpts.setCleanSession(true);
// 设置心跳秒数
connOpts.setKeepAliveInterval(60);
// 设置回调
mqttAsyncClient.setCallback(new MqttReconnectCallback());
mqttAsyncClient.connect(connOpts);
log.info("初始化应用");
return mqttAsyncClient;
} catch (MqttException e) {
log.error("初始化应用",e.getMessage());
}
return null;
}
class MqttReconnectCallback implements MqttCallbackExtended {
@Override
public void connectComplete(boolean b, String s) {
String topic = String.format("$sys/get/data/%s", clientId);
try {
mqttAsyncClient.subscribe(topic,1);
log.info("订阅主题成功");
} catch (MqttException e) {
log.error("订阅主题失败",e.getMessage());
}
}
@Override
public void connectionLost(Throwable throwable) {
try {
mqttAsyncClient.reconnect();
log.info("MQTT断开连接,重连成功");
} catch (MqttException e) {
log.error("MQTT断开连接",e.getMessage());
}
}
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
try {
} catch (Exception e) {
log.error("MQTT接收信息",e.getMessage());
}
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
}