1. 程式人生 > >EMQTT測試--安裝與測試

EMQTT測試--安裝與測試

官網

我下載的是windows版

安裝

將下載的壓縮包解壓,我解壓到了D盤

這裡寫圖片描述

命令列視窗,cd到程式目錄

控制檯模式啟動:

.\bin\emqttd console

報錯如下

無法啟動此程式,因為計算機中丟失 MSVCR120.dll。嘗試重新安裝該程式以解決次問題。

這裡寫圖片描述

找一個MSVCR120.dll檔案,可以去網上下載,也可以在自己電腦上找

這裡寫圖片描述

HBuilder下有
mqttfx下也有
XMind下也有
IDEA下也有

我拷貝一個mqttfx下的到Windows\System32下

這裡寫圖片描述

然後重新執行

.\bin\emqttd console

啟動成功

這裡寫圖片描述

登入

使用者名稱為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()));
    }

}

結果

這裡寫圖片描述

控制檯顯示

兩個連線

這裡寫圖片描述

參考文獻