日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

Paho-MQTT Java接入示例

本文介紹如何使用Java語言的Paho MQTT庫,接入阿里云物聯網平臺,并進行物模型消息通信。

前提條件

已在物聯網平臺中,創建了產品和設備,并在產品的功能定義頁簽下,定義一個LightSwitch屬性。

請參見創建產品單個創建設備單個添加物模型

準備開發環境

本示例使用的開發環境如下:

下載Java語言的Paho MQTT庫

根據要使用的MQTT協議版本,在Maven工程中添加如下依賴:

重要

您需要通過官網查看MQTT協議的可用版本,替換version值。

  • MQTT 3.1和3.1.1版本

    <dependencies>
      <dependency>
          <groupId>org.eclipse.paho</groupId>
          <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
          <version>1.2.1</version>
        </dependency>
    </dependencies>
  • MQTT 5.0版本

    <dependency>
       <groupId>org.eclipse.paho</groupId>
       <artifactId>org.eclipse.paho.mqttv5.client</artifactId>
       <version>1.2.5</version>
    </dependency>

接入物聯網平臺

  1. 單擊打開MqttSign.java,獲取阿里云提供的獲取MQTT連接參數所需的源代碼。

    MqttSign.java文件定義了MqttSign類,類說明如下:

    • 原型:

      class MqttSign
    • 功能:

      用于計算設備接入物聯網平臺的MQTT連接參數usernamepasswordclientid

    • 成員:

      類型定義

      方法描述

      public void

      calculate(String productKey, String deviceName, String deviceSecret)

      根據設備的productKeydeviceNamedeviceSecret計算出MQTT連接參數usernamepasswordclientid

      public String

      getUsername()

      用于獲取MQTT建連參數username

      public String

      getPassword()

      用于獲取MQTT建連參數password

      public String

      getClientid()

      用于獲取MQTT建連參數clientid

  2. 打開IntelliJ IDEA,創建項目。

  3. MqttSign.java導入項目中。

  4. 在項目中,添加實現設備接入物聯網平臺的程序文件。

    您需編寫程序調用MqttSign.java中的MqttSign類計算MQTT連接參數,實現設備接入物聯網平臺和通信。

    開發說明和示例代碼如下:

    • 調用MqttSign計算MQTT連接參數。

      String productKey = "a1X2bEn****";
      String deviceName = "example1";
      String deviceSecret = "ga7XA6KdlEeiPXQPpRbAjOZXwG8y****";
      
      // 計算MQTT連接參數。
      MqttSign sign = new MqttSign();
      sign.calculate(productKey, deviceName, deviceSecret);
      
      System.out.println("username: " + sign.getUsername());
      System.out.println("password: " + sign.getPassword());
      System.out.println("clientid: " + sign.getClientid());
    • 調用Paho MQTT客戶端連接物聯網平臺。

      //接入物聯網平臺的域名。
      String port = "443";
      String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;
      
      // Paho MQTT客戶端。
      MqttClient sampleClient = new MqttClient(broker, sign.getClientid(), persistence);
      
      // Paho MQTT連接參數。
      MqttConnectOptions connOpts = new MqttConnectOptions();
      connOpts.setCleanSession(true);
      connOpts.setKeepAliveInterval(180);
      connOpts.setUserName(sign.getUsername());
      connOpts.setPassword(sign.getPassword().toCharArray());
      sampleClient.connect(connOpts);
      System.out.println("Broker: " + broker + " Connected");
      重要

      修改代碼String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;中的接入域名,broker 值的格式為 "ssl://" + "${對應實例下MQTT接入域名}" + ":" + port

      公共實例和企業版實例接入域名的格式說明,請參見查看實例終端信息

    • 發布消息。

      以下示例代碼上報物模型屬性LightSwitch。

      // Paho MQTT發布消息。
      String topic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post";
      String content = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":1}}";
      MqttMessage message = new MqttMessage(content.getBytes());
      message.setQos(0);
      sampleClient.publish(topic, message);

      如果您使用MQTT 5.0協議通信,可添加以下示例代碼,上報消息時攜帶自定義屬性。

      //MQTT 5.0新特性:用戶自定義屬性
      MqttProperties properties = new MqttProperties();
      List<UserProperty> userPropertys = new ArrayList<>();
      userPropertys.add(new UserProperty("key1","value1"));
      properties.setUserProperties(userPropertys);
      
      //MQTT 5.0新特性:請求/響應模式
      properties.setCorrelationData("requestId12345".getBytes());
      properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get");
      
      message.setProperties(properties);
      
      //支持MQTT 5.0的Paho SDK默認會使用Topic別名
      sampleClient.publish(topic, message);

      物模型通信數據格式,請參見設備屬性、事件、服務

      如果您要使用自定義Topic通信,請參見什么是Topic

    • 訂閱Topic,獲取云端下發消息。

      以下示例中,訂閱的是上報屬性值后,物聯網平臺返回應答消息的Topic。

      class MqttPostPropertyMessageListener implements IMqttMessageListener {
          @Override
          public void messageArrived(String var1, MqttMessage var2) throws Exception {
              System.out.println("reply topic  : " + var1);
              System.out.println("reply payload: " + var2.toString());
          }
      }
      ...
      // Paho MQTT消息訂閱。
      String topicReply = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply";
      sampleClient.subscribe(topicReply, new MqttPostPropertyMessageListener());

    關于設備、服務器和物聯網平臺的通信方式介紹,請參見物聯網平臺通信方式概述

  5. 單擊Build Project按鈕build,編譯項目。

示例代碼

使用Demo代碼程序接入物聯網平臺。

  1. 下載代碼包(v3.1.1Demov5.0Demo),并解壓縮。

  2. 打開IntelliJ IDEA,導入Demo包中的示例工程aiot-java-demo

  3. pom.xml文件中修改Maven依賴項版本。詳細說明,請參見上文的“下載Java語言的Paho MQTT庫”。

    重要

    如果使用的相關插件版本不可用,請前往對應插件的官網查看可用版本進行替換。

  4. src/main/java/com.aliyun.iotAppMqtt5App文件中,修改設備信息為您的設備信息。

    說明

    MQTT 3.1和3.1.1協議通信,使用App文件,MQTT 5.0協議通信,使用Mqtt5App文件。

    • 替換一下代碼中productKeydeviceNamedeviceSecret的值為您的設備證書信息。

      String productKey = "${ProductKey}";
      String deviceName = "${DeviceName}";
      String deviceSecret = "${DeviceSecret}";
    • 修改代碼String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;中的接入域名。詳細說明,請參見上文“接入物聯網平臺”中的步驟4。

  5. 運行AppMqtt5App程序。

    運行成功日志如下圖所示。result

    登錄物聯網平臺控制臺,在對應實例下,可查看設備狀態和日志。

    • 選擇設備管理 > 設備,可看到該設備的狀態顯示為在線

    • 選擇監控運維 > 日志服務,可查看云端運行日志設備本地日志日志。詳情請參見云端運行日志設備本地日志

      如果使用Mqtt5App文件,可在日志詳情中查看到上報的自定義屬性。

      屬性

錯誤碼

如果設備通過MQTT協議接入物聯網平臺失敗,請根據錯誤碼排查問題。服務端錯誤碼說明,請參見錯誤排查