java mqtt是什么,讓我們一起了解一下?
MQTT是一個基于客戶端-服務(wù)器的消息發(fā)布或訂閱傳輸協(xié)議,MQTT協(xié)議是輕量、簡單、開放和易于實現(xiàn)的,如果工作在TCP或IP協(xié)議上,是為硬件性能低下的遠(yuǎn)程設(shè)備以及網(wǎng)絡(luò)狀況糟糕的情況下而設(shè)計的發(fā)布或訂閱型的消息協(xié)議。
MQTT主要應(yīng)用在哪些場合?
1、它是一種機(jī)器之間通訊 machine-to-machine (M2M)、物聯(lián)網(wǎng) Internet of Things (IoT)常用的一種輕量級消息傳輸協(xié)議。
2、適用于網(wǎng)絡(luò)帶寬較低的場合。
3、包含發(fā)布、訂閱模式,通過一個代理服務(wù)器(broker),任何一個客戶端(client)都可以訂閱或者發(fā)布某個主題的消息,然后訂閱了該主題的客戶端則會收到該消息。
實戰(zhàn)操作:模擬客戶端接收消息。
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為主機(jī)名,clientid即連接MQTT的客戶端ID,一般以唯一標(biāo)識符表示,MemoryPersistence設(shè)置clientid的保存形式,默認(rèn)為以內(nèi)存保存 ????????????client?=?new?MqttClient(HOST,?clientid,?new?MemoryPersistence()); ????????????//?MQTT的連接設(shè)置 ????????????options?=?new?MqttConnectOptions(); ????????????//?設(shè)置是否清空session,這里如果設(shè)置為false表示服務(wù)器會保留客戶端的連接記錄,設(shè)置為true表示每次連接到服務(wù)器都以新的身份連接 ????????????options.setCleanSession(false); ????????????//?設(shè)置連接的用戶名 ????????????options.setUserName(userName); ????????????//?設(shè)置連接的密碼 ????????????options.setPassword(passWord.toCharArray()); ????????????//?設(shè)置超時時間?單位為秒 ????????????options.setConnectionTimeout(10); ????????????//?設(shè)置會話心跳時間?單位為秒?服務(wù)器會每隔1.5*20秒的時間向客戶端發(fā)送個消息判斷客戶端是否在線,但這個方法并沒有重連的機(jī)制 ????????????options.setKeepAliveInterval(20); ????????????//設(shè)置斷開后重新連接 ????????????options.setAutomaticReconnect(true); ????????????//?設(shè)置回調(diào) ????????????client.setCallback(new?PushCallback()); ????????????MqttTopic?topic?=?client.getTopic(TOPIC1); ????????????//setWill方法,如果項目中需要知道客戶端是否掉線可以調(diào)用該方法。設(shè)置最終端口的通知消息 ????????????//遺囑 ????????????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(); ? ????}
以上就是小編今天的分享了,希望可以幫助到大家。