全部產品
Search
文件中心

IoT Platform:Java SDK接入樣本

更新時間:Jun 30, 2024

本文介紹使用AMQP協議的JMS用戶端接入阿里雲物聯網平台,接收服務端訂閱訊息的樣本。

前提條件

已擷取消費組ID,並訂閱Topic訊息。

準備開發環境

樣本使用的開發環境如下:

下載Apache Qpid JMS用戶端

您可訪問Qpid JMS 0.57.0,查看Qpid JMS使用說明。

本文樣本中,通過在Maven工程中添加如下依賴,下載Qpid JMS用戶端。

<!-- amqp 1.0 qpid client -->
 <dependency>
   <groupId>org.apache.qpid</groupId>
   <artifactId>qpid-jms-client</artifactId>
   <version>0.57.0</version>
 </dependency>
 <!-- util for base64-->
 <dependency>
   <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.10</version>
</dependency>

樣本Demo

假設企業A和企業B分別有一個阿里雲主帳號A和阿里雲主帳號B,企業A使用阿里雲主帳號在物聯網平台已佈建服務端訂閱:

  • 對於阿里雲主帳號A或其下直接授權的RAM使用者

    說明

    對於直接授權的RAM使用者,需要給該RAM使用者授予操作AMQP服務端訂閱功能的許可權(iot:sub),否則將會串連失敗。授權方法,請參見物聯網平台RAM授權說明

    為提升物聯網平台資料安全,推薦通過RAM角色授予RAM使用者指定的操作許可權。具體說明,請參見下文。

    開發AMQP用戶端接收服務端訂閱的裝置訊息,請參見本帳號接收服務端訂閱訊息

  • 對於通過RAM角色授權的RAM使用者

    RAM使用者可為阿里雲主帳號A下的RAM使用者,或阿里雲主帳號B下的RAM使用者,即支援使用本帳號(阿里雲主帳號A)和跨帳號(阿里雲主帳號B)的RAM使用者,開發AMQP用戶端接入本帳號的物聯網平台,接收服務端訂閱的裝置訊息。

    開發AMQP用戶端接收服務端訂閱的裝置訊息,請參見通過RAM角色授權的RAM使用者接收服務端訂閱訊息

本帳號接收服務端訂閱訊息

  1. 下載Demo程式碼封裝,並解壓。

  2. 開啟IntelliJ IDEA,匯入Demo包中的樣本工程amqp-demo

    pom.xml檔案中,已添加Maven依賴,下載Qpid JMS用戶端。

  3. src/main/java/com.aliyun.iotx.demo目錄下AmqpClient.java檔案中,參照下表,修改AMQP的接入資訊。

    重要
    • 請確保參數值輸入正確,否則AMQP用戶端接入會失敗。

    • 本樣本Demo代碼中,添加了結束程式的代碼(Thread.sleep(60 * 1000);),即程式啟動成功,運行一分鐘後會結束。實際情境中,您可根據需要自行設定已耗用時間。

    更多參數說明,請參見AMQP用戶端接入說明

    參數

    說明

    accessKey

    阿里雲主帳號或對應RAM使用者的AccessKey ID和AccessKey Secret。

    登入物聯網平台控制台,將滑鼠移至帳號頭像上,然後單擊AccessKey管理,擷取AccessKey ID和AccessKey Secret。

    accessSecret

    consumerGroupId

    當前物聯網平台對應執行個體中的消費組ID。

    登入物聯網平台控制台,在對應執行個體的訊息轉寄 > 服務端訂閱 > 消費組列表查看您的消費組ID。

    iotInstanceId

    執行個體ID。您可在物聯網平台控制台執行個體概覽頁面,查看當前執行個體的ID。

    • 若有ID值,必須傳入該ID值。

    • 若無執行個體概覽頁面或ID值,傳入空值,即iotInstanceId = ""

    clientId

    表示用戶端ID,需您自訂,長度不可超過64個字元。建議使用您的AMQP用戶端所在伺服器UUID、MAC地址、IP等唯一標識。

    AMQP用戶端接入並啟動成功後,登入物聯網平台控制台,在對應執行個體的訊息轉寄 > 服務端訂閱 > 消費組列表頁簽,單擊消費組對應的查看消費組詳情頁面將顯示該參數,方便您識別區分不同的用戶端。

    connectionCount

    啟動AMQP用戶端的串連數,最大不超過128個。用於即時訊息推送的擴容。

    消費組詳情頁面會以${clientId}+"-"+數字形式,顯示串連的用戶端。其中數字最小值為0。

    host

    AMQP接入網域名稱。

    ${YourHost}對應的AMQP接入網域名稱資訊,請參見查看和配置執行個體終端節點資訊(Endpoint)

  4. 運行AmqpClient.java程式。

    • 成功:返回類似如下日誌資訊,表示AMQP用戶端已接入物聯網平台並成功接收訊息。

      topic = /***********/******/thing/event/property/post,
      message = 2**************7,
      content = {"temperature":29,"humidity":29,"time":1617357297270}

      參數

      說明

      topic

      裝置屬性上報的Topic。

      messageId

      訊息的ID。

      content

      訊息的內容。

    • 失敗:例如代碼或網路環境有問題,AMQP用戶端串連物聯網平台會失敗。

      您可根據日誌提示,檢查代碼或網路環境,然後修正問題,重新運行代碼。

通過RAM角色授權的RAM使用者接收服務端訂閱訊息

前提條件

RAM使用者已通過RAM角色授權擷取企業A阿里雲帳號物聯網平台的服務端訂閱操作許可權。具體操作,請參見本帳號RAM使用者授權服務端訂閱跨帳號RAM使用者授權服務端訂閱

接入樣本

  1. 下載Demo程式碼封裝,然後解壓。

  2. 開啟IntelliJ IDEA,匯入Demo包中的樣本工程amqp-sts-demo

    pom.xml檔案中,已添加Maven依賴,下載Qpid JMS用戶端。

  3. src/main/java/com/aliyun/iotx/demo目錄下AmqpStsTokenClient.java檔案中,參照下表,修改AMQP的接入資訊。

    重要
    • 請確保參數值輸入正確,否則AMQP用戶端接入會失敗。

    • STS Token有效期間最長1個小時,需要定時更新AMQP用戶端接入中的建連資訊,以確保AMQP用戶端正常重連成功。具體修改方式可參考樣本Demo代碼中的 scheduledExecutorService.scheduleAtFixedRate部分。

    • 本樣本Demo代碼中,添加了結束程式的代碼(Thread.sleep(6000 * 1000);),即程式啟動成功,運行一分鐘後會結束。實際情境中,您可根據需要自行設定已耗用時間。

    更多參數說明,請參見AMQP用戶端接入說明

    參數

    說明

    CONNECTION_COUNT

    啟動AMQP用戶端的串連數,最大不超過128個。用於即時訊息推送的擴容。

    本帳號物聯網平台的消費組詳情頁面會以"clientId-"+數字形式,顯示串連的用戶端。其中數字最小值為0。

    DURATION_SECONDS

    串連參數Token有效期間,不能超過1小時,取值範圍:15~60分鐘。

    STS_ENDPOINT

    STS Token擷取服務存取點。具體資訊,請參見服務存取點

    STS_ACCESS_KEY

    扮演企業A阿里雲帳號下RAM角色的RAM使用者的AccessKey ID和AccessKey Secret。

    STS_ACCESS_SECRET

    STS_ROLE_ARN

    企業A阿里雲帳號下要扮演的RAM角色ARN,格式為acs:ram::<account-id>:role/<role-name>

    其中,<role-name>部分會將角色的名稱全部轉換為小寫。建立角色後,您可以單擊角色名稱,在基本資料地區查看角色ARN。

    CONSUMER_GROUP_ID

    企業A阿里雲帳號下服務端訂閱的消費組ID。

    可在物聯網平台控制台對應執行個體的訊息轉寄 > 服務端訂閱 > 消費組列表頁簽,查看消費組ID。

    IOT_INSTANCE_ID

    企業A阿里雲帳號下物聯網平台執行個體ID。

    可在物聯網平台控制台執行個體概覽頁簽,查看執行個體的ID。

    • 若有ID值,必須傳入該ID值。

    • 若無執行個體概覽頁簽或ID值,傳入空值,即IOT_INSTANCE_ID = ""

    HOST

    企業A阿里雲帳號下物聯網平台執行個體的AMQP接入網域名稱。具體資訊,請參見查看和配置執行個體終端節點資訊(Endpoint)

  4. 運行AmqpStsTokenClient.java程式。

    • 成功:返回類似如下日誌資訊,表示AMQP用戶端已接入物聯網平台並成功接收訊息。

      topic = /***********/******/thing/event/property/post,
      message = 2**************7,
      content = {"temperature":29,"humidity":29,"time":1617357297270}

      參數

      說明

      topic

      裝置屬性上報的Topic。

      messageId

      訊息的ID。

      content

      訊息的內容。

    • 失敗:例如代碼或網路環境有問題,AMQP用戶端串連物聯網平台會失敗。

      您可根據日誌提示,檢查代碼或網路環境,然後修正問題,重新運行代碼。

相關文檔

服務端訂閱訊息相關錯誤碼,請參見訊息相關錯誤碼