java mqtt是什么,讓我們一起了解一下?
MQTT是一個基于客戶端-服務器的消息發布或訂閱傳輸協議,MQTT協議是輕量、簡單、開放和易于實現的,如果工作在TCP或IP協議上,是為硬件性能低下的遠程設備以及網絡狀況糟糕的情況下而設計的發布或訂閱型的消息協議。
MQTT主要應用在哪些場合?
1、它是一種機器之間通訊 machine-to-machine (M2M)、物聯網 Internet of Things (IoT)常用的一種輕量級消息傳輸協議。
2、適用于網絡帶寬較低的場合。
3、包含發布、訂閱模式,通過一個代理服務器(broker),任何一個客戶端(client)都可以訂閱或者發布某個主題的消息,然后訂閱了該主題的客戶端則會收到該消息。
實戰操作:模擬客戶端接收消息。
import?java.util.concurrent.ScheduledExecutorService; import?org.eclipse.paho.client.mqttv3.MqttClient; import?org.eclipse.paho.client.mqttv3.MqttConnectOptions; import?org.eclipse.paho.client.mqttv3.MqttTopic; import?org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; ? /** ?*?模擬一個客戶端接收消息 ?* ?*?@author?Unclue_liu ?*/ public?class?ClientMQTT?{ ? ????public?static?final?String?HOST?=?"tcp://192.168.1.77:1883"; ????public?static?final?String?TOPIC1?=?"pos_message_all"; ????private?static?final?String?clientid?=?"12345678"; ????private?MqttClient?client; ????private?MqttConnectOptions?options; ????private?String?userName?=?"mqtt";????//非必須 ????private?String?passWord?=?"mqtt";??//非必須 ????private?ScheduledExecutorService?scheduler; ? ????private?void?start()?{ ????????try?{ ????????????//?host為主機名,clientid即連接MQTT的客戶端ID,一般以唯一標識符表示,MemoryPersistence設置clientid的保存形式,默認為以內存保存 ????????????client?=?new?MqttClient(HOST,?clientid,?new?MemoryPersistence()); ????????????//?MQTT的連接設置 ????????????options?=?new?MqttConnectOptions(); ????????????//?設置是否清空session,這里如果設置為false表示服務器會保留客戶端的連接記錄,設置為true表示每次連接到服務器都以新的身份連接 ????????????options.setCleanSession(false); ????????????//?設置連接的用戶名 ????????????options.setUserName(userName); ????????????//?設置連接的密碼 ????????????options.setPassword(passWord.toCharArray()); ????????????//?設置超時時間?單位為秒 ????????????options.setConnectionTimeout(10); ????????????//?設置會話心跳時間?單位為秒?服務器會每隔1.5*20秒的時間向客戶端發送個消息判斷客戶端是否在線,但這個方法并沒有重連的機制 ????????????options.setKeepAliveInterval(20); ????????????//設置斷開后重新連接 ????????????options.setAutomaticReconnect(true); ????????????//?設置回調 ????????????client.setCallback(new?PushCallback()); ????????????MqttTopic?topic?=?client.getTopic(TOPIC1); ????????????//setWill方法,如果項目中需要知道客戶端是否掉線可以調用該方法。設置最終端口的通知消息 ????????????//遺囑 ????????????options.setWill(topic,?"close".getBytes(),?1,?true); ????????????client.connect(options); ????????????//訂閱消息 ????????????int[]?Qos?=?{1};//0:最多一次?、1:最少一次?、2:只有一次 ????????????String[]?topic1?=?{TOPIC1}; ????????????client.subscribe(topic1,?Qos); ? ????????}?catch?(Exception?e)?{ ????????????e.printStackTrace(); ????????} ????} ? ????public?static?void?main(String[]?args)??{ ????????ClientMQTT?client?=?new?ClientMQTT(); ????????client.start(); ? ????}
以上就是小編今天的分享了,希望可以幫助到大家。