轉自:https://blog.csdn.net/vicky_lov/article/details/84585252
1.emqtt下載地址:http://emqtt.com/downloads,找到自己要下載的版本信息,注意開發版、穩定版;
2.下載后放到硬盤根目錄,進入下載路徑目錄,cmd進入dos窗口,如下圖:
3.輸入.\bin\emqttd consloe,之后彈出啟動狀態頁面,代表啟動成功;
4.登錄:地址 :http://localhost:18083/
用戶名為:admin 密碼為:public
登錄上去就可以看服務器的運行狀態了。
測試
依賴
<dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.0.2</version> </dependency>
Server
package com.mymqtt.myemqtt; import java.util.Scanner; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttMessage; public class Server { public static void main(String[] args) throws Exception { String host = "tcp://127.0.0.1:1883"; String topic = "hello"; String clientId = "server";// clientId不能重復 MqttConnectOptions options = new MqttConnectOptions(); options.setCleanSession(true); MqttClient client = new MqttClient(host, clientId); client.connect(options); MqttMessage message = new MqttMessage(); @SuppressWarnings("resource") Scanner scanner = new Scanner(System.in); System.out.println("請輸入要發送的內容:"); while (true) { String line = scanner.nextLine(); message.setPayload(line.getBytes()); client.publish(topic, message); } } }
Client
package com.mymqtt.myemqtt; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; public class Client { public static void main(String[] args) throws Exception { String host = "tcp://127.0.0.1:1883"; String topic = "hello"; String clientId = "12345";// clientId不能重復 // 1.設置mqtt連接屬性 MqttConnectOptions options = new MqttConnectOptions(); options.setCleanSession(true); // 2.實例化mqtt客戶端 MqttClient client = new MqttClient(host, clientId); // 3.連接 client.connect(options); client.setCallback(new PushCallback()); while (true) { client.subscribe(topic, 2); } // client.disconnect(); } }
PushCallback
package com.mymqtt.myemqtt; import java.util.Date; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PushCallback implements MqttCallback { private final Logger logger = LoggerFactory.getLogger(this.getClass()); public void connectionLost(Throwable cause) { // 連接丟失后,一般在這里面進行重連 System.out.println("連接斷開,可以做重連"); logger.info("掉線時間:{}", new Date()); } public void deliveryComplete(IMqttDeliveryToken token) { System.out.println("deliveryComplete---------" + token.isComplete()); } public void messageArrived(String topic, MqttMessage message) throws Exception { // subscribe后得到的消息會執行到這里面 // System.out.println(message); System.out.println("接收消息主題 : " + topic); System.out.println("接收消息Qos : " + message.getQos()); System.out.println("接收消息內容 : " + new String(message.getPayload())); } }
結果:
控制台顯示
兩個連接
參考資料:http://emqtt.com/