import org.eclipse.paho.client.mqttv3.*;importorg.eclipse.paho.client.mqttv3.persist.MemoryPersistence;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component;/*** Description:
* mqtt客户端
*@authorVictor*/@Componentpublic classMqttPushClient {
@AutowiredprivatePushCallback pushCallback;private static final Logger LOGGER = LoggerFactory.getLogger(MqttPushClient.class);private staticMqttClient client;public staticMqttClient getClient() {returnclient;
}public static voidsetClient(MqttClient client) {
MqttPushClient.client=client;
}/*** 连接
*@paramhost .
*@paramclientID .
*@paramusername .
*@parampassword .*/
public voidconnect(String host, String clientID, String username, String password) {
MqttClient client;try{
client= new MqttClient(host, clientID, newMemoryPersistence());
MqttConnectOptions options= newMqttConnectOptions();
options.setCleanSession(false);
options.setUserName(username);
options.setPassword(password.toCharArray());
options.setConnectionTimeout(30);
options.setKeepAliveInterval(20);
MqttPushClient.setClient(client);try{
client.setCallback(pushCallback);
client.connect(options);
}catch(Exception e) {
e.printStackTrace();
}
}catch(Exception e) {
e.printStackTrace();
}
}/*** 发布,默认qos为0,非持久化
*
*@paramtopic .
*@parampushMessage .*/
public voidpublish(String topic, String pushMessage) {
publish(0, false, topic, pushMessage);
}/*** 发布主题和消息队列
*
*@paramqos .
*@paramretained .
*@paramtopic .
*@parampushMessage .*/
public void publish(int qos, booleanretained, String topic, String pushMessage) {
MqttMessage message= newMqttMessage();
message.setQos(qos);
message.setRetained(retained);
message.setPayload(pushMessage.getBytes());
MqttTopic mTopic=MqttPushClient.getClient().getTopic(topic);if (null ==mTopic) {
LOGGER.error("topic not exist");
}
MqttDeliveryToken token;try{
token=mTopic.publish(message);
token.waitForCompletion();
}catch(MqttPersistenceException e) {
e.printStackTrace();
}catch(MqttException e) {
e.printStackTrace();
}
}/*** 订阅某个主题,qos默认为0
*
*@paramtopic .*/
public voidsubscribe(String topic) {
subscribe(topic,0);
}/*** 订阅某个主题
*
*@paramtopic .
*@paramqos .*/
public void subscribe(String topic, intqos) {try{
MqttPushClient.getClient().subscribe(topic, qos);
}catch(MqttException e) {
e.printStackTrace();
}
}
}