大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java實現mqtt協議的方法

Java實現mqtt協議的方法

更新時間:2022-10-13 10:48:59 來源:動力節點 瀏覽1957次

簡單實現一個MQTT協議,需要一個本地服務器。

下載EMQX ,在本地安裝好并運行起來,與Tomcat服務器類似,不過比Tomcat服務器安裝的步驟少且簡單不少。

java實現MQTT協議需要有三個類,一個客戶端類,一個服務端類,還有一個回調函數類。

第一步:創建maven工程,添加maven依賴

 <dependencies>
        <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.1.0</version>
        </dependency>
    </dependencies>

第二步:創建三個類(包名隨意)

服務端類

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.Scanner;
public class ServiceMQTT {
    public static final String HOST = "tcp://localhost:1883";
    private String ServiceID = "ServiceFirst";
    private String topic;
    private MqttClient client;
    private MqttTopic mqttTopic;
    private MqttConnectOptions options;
    private String user = "admin";
    private String password = "public";
    private MqttMessage message;
    public ServiceMQTT() throws MqttException {
        //創建連接
        client = new MqttClient(HOST,ServiceID,new MemoryPersistence());
        options = new MqttConnectOptions();
        options.setCleanSession(false);
        options.setKeepAliveInterval(20);
        options.setConnectionTimeout(50);
        options.setUserName(user);
        options.setPassword(password.toCharArray());
        message = new MqttMessage();
    }
    public void getConnect(){
        try {
            client.setCallback(new PublishCallBack());
            client.connect(options);
            mqttTopic = client.getTopic(topic);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
    public void publish(MqttTopic topic, MqttMessage message) throws MqttException {
        MqttDeliveryToken token = topic.publish(message);
        token.waitForCompletion();
        System.out.println("消息推送的狀態--->"+token.isComplete());
    }
    public static void main(String[] args) throws MqttException {
        ServiceMQTT service = new ServiceMQTT();
        Scanner input = new Scanner(System.in);
        System.out.print("請輸入消息的主題:");
        service.topic = input.next();
        System.out.print("請輸入消息的內容:");
        String messageVal = input.next();
        service.getConnect();
        service.message.setQos(1);
        service.message.setRetained(true);
        service.message.setPayload(messageVal.getBytes());
        service.publish(service.mqttTopic,service.message);
        System.out.println("消息的保持狀態:"+service.message.isRetained());
    }
}

客戶端類

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.Scanner;
public class ClientMQTT {
    public static final String HOST = "tcp://localhost:1883";
    private static final String clientID = "clientFirst";
    private String TOPIC;
    private MqttClient client;
    private MqttConnectOptions options;
    private String user = "admin";
    private String password = "public";
    public void clientStart(){
        try {
            client = new MqttClient(HOST,clientID,new MemoryPersistence());
            options = new MqttConnectOptions();
            options.setCleanSession(true);
            options.setKeepAliveInterval(10);
            options.setConnectionTimeout(50);
            options.setUserName(user);
            options.setPassword(password.toCharArray());
            client.setCallback(new PublishCallBack());
            Scanner input = new Scanner(System.in);
            System.out.print("請輸入訂閱的主題:");
            TOPIC = input.next();
            MqttTopic topic = client.getTopic(TOPIC);
            //setWill方法,如果項目中需要知道客戶端是否掉線可以調用該方法。設置最終端口的通知消息
            options.setWill(topic,"close".getBytes(),1,true);
            client.connect(options);
            int[] Qos = {1};
            String[] topic1 = {TOPIC};
            client.subscribe(topic1,Qos);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws MqttException {
        ClientMQTT clientMQTT = new ClientMQTT();
        clientMQTT.clientStart();
    }
}

回調函數類

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class PublishCallBack implements MqttCallback {
    public void connectionLost(Throwable throwable) {
        //連接斷掉會執行到這里
        System.out.println("連接以斷,請重新連接!!!");
    }
    public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
        //subscribe后會執行到這里
        System.out.println("消息的主題是:"+s);
        System.out.println("消息的Qos是:"+mqttMessage.getQos());
        System.out.println("消息的ID是:"+mqttMessage.getId());
        System.out.println("消息的內容是:"+new String(mqttMessage.getPayload()));
    }
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
        //publish可以執行到這里
        System.out.println("This is deliveryComplete method----->"+iMqttDeliveryToken.isComplete());
    }
}

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 最新国产精品亚洲 | 91免费视频国产 | 天天色天天操天天射 | 欧美v在线观看 | 精品久久久久久久一区二区伦理 | 日韩欧美在线观看 | 亚洲欧美日韩在线精品2021 | 精品国产一二三区 | 国产91在线 | 日本 | 日本一级大毛片a一 | 日本特级全黄一级毛片 | 国产原创麻豆精品视频 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 免费一级特黄特色黄大任片 | 亚洲乱码国产乱码精品精98 | 在线观看亚洲成人 | 91精品国产免费久久国语麻豆 | 亚洲欧美综合国产精品一区 | 波多野结衣与公中出中文字幕 | 国产在线一区二区三区欧美 | 亚洲国产一区在线二区三区 | 九九99热久久精品在线6手机 | 国产片一级aaa毛片视频 | 4虎影院午夜在线观看 | 91亚洲国产 | 久久午夜国产片 | 亚洲12色吧| 国产视频精品视频 | 国产精品久久久久免费 | 国产精品亚洲高清一区二区 | 日本一级毛片在线播放 | 91中文字幕在线视频 | 97视频在线观看免费视频 | 日本高清免费视频不卡a | 国产精品福利在线 | 亚洲国产综合久久精品 | 欧美日韩亚洲综合久久久 | 亚洲一级免费视频 | 综合欧美日韩一区二区三区 | 国产成人精品久久 | 免费一级特黄特色黄大任片 |