|
|
@ -10,66 +10,66 @@ import java.util.Map;
|
|
|
|
|
|
|
|
|
|
|
|
@Slf4j
|
|
|
|
@Slf4j
|
|
|
|
public class CustomerMqttClient {
|
|
|
|
public class CustomerMqttClient {
|
|
|
|
private static MqttAsyncClient client;
|
|
|
|
private static MqttClient client;
|
|
|
|
private MqttProperties properties;
|
|
|
|
private MqttProperties properties;
|
|
|
|
|
|
|
|
|
|
|
|
public static MqttAsyncClient getClient() {
|
|
|
|
public static MqttClient getClient() {
|
|
|
|
return client;
|
|
|
|
return client;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void setClient(MqttAsyncClient client) {
|
|
|
|
public static void setClient(MqttClient client) {
|
|
|
|
CustomerMqttClient.client = client;
|
|
|
|
CustomerMqttClient.client = client;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void connect() throws MqttException {
|
|
|
|
public void connect() throws MqttException {
|
|
|
|
client = new MqttAsyncClient(properties.getHost(), properties.getClientId(), new MemoryPersistence());
|
|
|
|
client = new MqttClient(properties.getHost(), properties.getClientId(), new MemoryPersistence());
|
|
|
|
MqttConnectOptions options = new MqttConnectOptions();
|
|
|
|
MqttConnectOptions options = new MqttConnectOptions();
|
|
|
|
if (StrUtil.isNotEmpty(properties.getUsername())) {
|
|
|
|
if (StrUtil.isNotEmpty(properties.getUserName())) {
|
|
|
|
options.setUserName(properties.getUsername());
|
|
|
|
options.setUserName(properties.getUserName());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (StrUtil.isNotEmpty(properties.getPassword())) {
|
|
|
|
if (StrUtil.isNotEmpty(properties.getPassWord())) {
|
|
|
|
options.setPassword(properties.getPassword().toCharArray());
|
|
|
|
options.setPassword(properties.getPassWord().toCharArray());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
options.setCleanSession(properties.getCleanSession());
|
|
|
|
options.setCleanSession(properties.getCleanSession());
|
|
|
|
options.setKeepAliveInterval(properties.getKeepAlive());
|
|
|
|
options.setKeepAliveInterval(properties.getKeepAlive());
|
|
|
|
options.setConnectionTimeout(properties.getTimeout());
|
|
|
|
options.setConnectionTimeout(properties.getTimeout());
|
|
|
|
|
|
|
|
options.setAutomaticReconnect(true);
|
|
|
|
|
|
|
|
|
|
|
|
if (!client.isConnected()) {
|
|
|
|
if (!client.isConnected()) {
|
|
|
|
|
|
|
|
client.setCallback(new MyMqttCallback(client));
|
|
|
|
client.connect(options);
|
|
|
|
client.connect(options);
|
|
|
|
client.setCallback(new MyMqttCallback(this));
|
|
|
|
|
|
|
|
log.info("连接MQTT服务成功 success");
|
|
|
|
log.info("连接MQTT服务成功 success");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
client.disconnect();
|
|
|
|
client.disconnect();
|
|
|
|
client.connect(options);
|
|
|
|
client.connect(options);
|
|
|
|
log.info("重新连接MQTT服务成功 success");
|
|
|
|
log.info("重新连接MQTT服务成功 success");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
initSubscribe();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void disconnect() throws MqttException {
|
|
|
|
public void disconnect() throws MqttException {
|
|
|
|
client.disconnect();
|
|
|
|
client.disconnect();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void publish(String pushMessage, String topic) {
|
|
|
|
public void publish(String msg, String topic) {
|
|
|
|
publish(pushMessage, topic, properties.getQos(), false);
|
|
|
|
publish(msg, topic, properties.getQos(), false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void publish(String pushMessage, String topic, int qos, boolean retained) {
|
|
|
|
public void publish(String msg, String topic, int qos, boolean retained) {
|
|
|
|
MqttMessage message = new MqttMessage();
|
|
|
|
MqttMessage message = new MqttMessage();
|
|
|
|
message.setPayload(pushMessage.getBytes());
|
|
|
|
message.setPayload(msg.getBytes());
|
|
|
|
message.setQos(qos);
|
|
|
|
message.setQos(qos);
|
|
|
|
message.setRetained(retained);
|
|
|
|
message.setRetained(retained);
|
|
|
|
MqttAsyncClient asyncClient = CustomerMqttClient.getClient();
|
|
|
|
MqttTopic mqttTopic = client.getTopic(topic);
|
|
|
|
// MqttTopic mqttTopic = asyncClient..getTopic(topic);
|
|
|
|
if (null == mqttTopic) {
|
|
|
|
// if (null == mqttTopic) {
|
|
|
|
log.error("发布失败,主题不存在!!topic: {} , qos: {} ", topic, qos);
|
|
|
|
// log.error("发布失败,主题不存在!!topic: {} , qos: {} ", topic, qos);
|
|
|
|
}
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
IMqttDeliveryToken deliveryToken = asyncClient.publish(topic, message);
|
|
|
|
client.publish(topic, message);
|
|
|
|
MqttMessage reMessage = deliveryToken.getMessage();
|
|
|
|
log.info("发布成功 topic: {} , qos: {} , message: {}", topic, qos, msg);
|
|
|
|
log.info("发布成功 topic: {} , qos: {} , message: {},返回消息:{}", topic, qos, pushMessage,reMessage.getPayload());
|
|
|
|
|
|
|
|
} catch (MqttException e) {
|
|
|
|
} catch (MqttException e) {
|
|
|
|
log.info("发布失败 topic: {} , qos: {} , message: {}", topic, qos, pushMessage);
|
|
|
|
log.info("发布失败 topic: {} , qos: {} , message: {}", topic, qos, msg);
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -88,17 +88,17 @@ public class CustomerMqttClient {
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void subscribe(String topic, int qos) {
|
|
|
|
public void subscribe(String topicFilter, int qos) {
|
|
|
|
if (client != null && client.isConnected()) {
|
|
|
|
if (client != null && client.isConnected()) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
client.subscribe(topic, qos);
|
|
|
|
client.subscribe(topicFilter, qos);
|
|
|
|
log.info("订阅主题成功,topic: {} , qos: {} ", topic, qos);
|
|
|
|
log.info("订阅主题成功,topic: {} , qos: {} ", topicFilter, qos);
|
|
|
|
} catch (MqttException e) {
|
|
|
|
} catch (MqttException e) {
|
|
|
|
log.error("订阅主题失败 topic:{}, qos: {} ", topic, qos);
|
|
|
|
log.error("订阅主题失败 topic:{}, qos: {} ", topicFilter, qos);
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
log.error("客户端连接状态已断开,订阅主题失败 topic:{}, qos: {} ", topic, qos);
|
|
|
|
log.error("客户端连接状态已断开,订阅主题失败 topic:{}, qos: {} ", topicFilter, qos);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -122,16 +122,11 @@ public class CustomerMqttClient {
|
|
|
|
for (Map.Entry<String, Integer> entry : topics.entrySet()) {
|
|
|
|
for (Map.Entry<String, Integer> entry : topics.entrySet()) {
|
|
|
|
String topic = entry.getKey();
|
|
|
|
String topic = entry.getKey();
|
|
|
|
int qos = entry.getValue();
|
|
|
|
int qos = entry.getValue();
|
|
|
|
try {
|
|
|
|
log.info("初始化订阅主题 topic: {} , qos: {} ", topic, qos);
|
|
|
|
client.subscribe(topic, qos);
|
|
|
|
subscribe(topic, qos);
|
|
|
|
log.info("初始化订阅主题成功,topic: {} , qos: {} ", topic, qos);
|
|
|
|
|
|
|
|
} catch (MqttException e) {
|
|
|
|
|
|
|
|
log.error("初始化订阅主题失败 topic:{}, qos: {} ", topic, qos);
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
log.error("client is not connected,fail to init subscribe topics!!!");
|
|
|
|
log.error("客户端未连接,初始化订阅失败!!!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|