Java SDK接入示例
本文介紹使用AMQP協(xié)議的JMS客戶端接入阿里云物聯(lián)網(wǎng)平臺(tái),接收服務(wù)端訂閱消息的示例。
前提條件
已獲取消費(fèi)組ID,并訂閱Topic消息。
管理AMQP消費(fèi)組:您可使用物聯(lián)網(wǎng)平臺(tái)默認(rèn)消費(fèi)組(DEFAULT_GROUP)或創(chuàng)建消費(fèi)組。
配置AMQP服務(wù)端訂閱:您可通過消費(fèi)組訂閱需要的Topic消息。
準(zhǔn)備開發(fā)環(huán)境
示例使用的開發(fā)環(huán)境如下:
操作系統(tǒng):Windows10
JDK版本:JDK8
集成開發(fā)環(huán)境:IntelliJ IDEA社區(qū)版
下載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
假設(shè)企業(yè)A和企業(yè)B分別有一個(gè)阿里云主賬號(hào)A和阿里云主賬號(hào)B,企業(yè)A使用阿里云主賬號(hào)在物聯(lián)網(wǎng)平臺(tái)已配置服務(wù)端訂閱:
對(duì)于阿里云主賬號(hào)A或其下直接授權(quán)的RAM用戶
說明對(duì)于直接授權(quán)的RAM用戶,需要給該RAM用戶授予操作AMQP服務(wù)端訂閱功能的權(quán)限(iot:sub),否則將會(huì)連接失敗。授權(quán)方法,請(qǐng)參見物聯(lián)網(wǎng)平臺(tái)RAM授權(quán)說明。
為提升物聯(lián)網(wǎng)平臺(tái)數(shù)據(jù)安全,推薦通過RAM角色授予RAM用戶指定的操作權(quán)限。具體說明,請(qǐng)參見下文。
開發(fā)AMQP客戶端接收服務(wù)端訂閱的設(shè)備消息,請(qǐng)參見本賬號(hào)接收服務(wù)端訂閱消息。
對(duì)于通過RAM角色授權(quán)的RAM用戶
RAM用戶可為阿里云主賬號(hào)A下的RAM用戶,或阿里云主賬號(hào)B下的RAM用戶,即支持使用本賬號(hào)(阿里云主賬號(hào)A)和跨賬號(hào)(阿里云主賬號(hào)B)的RAM用戶,開發(fā)AMQP客戶端接入本賬號(hào)的物聯(lián)網(wǎng)平臺(tái),接收服務(wù)端訂閱的設(shè)備消息。
開發(fā)AMQP客戶端接收服務(wù)端訂閱的設(shè)備消息,請(qǐng)參見通過RAM角色授權(quán)的RAM用戶接收服務(wù)端訂閱消息。
本賬號(hào)接收服務(wù)端訂閱消息
下載Demo代碼包,并解壓。
打開IntelliJ IDEA,導(dǎo)入Demo包中的示例工程amqp-demo。
在
pom.xml
文件中,已添加Maven依賴,下載Qpid JMS客戶端。在
src/main/java/com.aliyun.iotx.demo
目錄下AmqpClient.java
文件中,參照下表,修改AMQP的接入信息。重要請(qǐng)確保參數(shù)值輸入正確,否則AMQP客戶端接入會(huì)失敗。
本示例Demo代碼中,添加了結(jié)束程序的代碼(
Thread.sleep(60 * 1000);
),即程序啟動(dòng)成功,運(yùn)行一分鐘后會(huì)結(jié)束。實(shí)際場(chǎng)景中,您可根據(jù)需要自行設(shè)置運(yùn)行時(shí)間。
更多參數(shù)說明,請(qǐng)參見AMQP客戶端接入說明。
參數(shù)
說明
accessKey
阿里云主賬號(hào)或?qū)?yīng)RAM用戶的AccessKey ID和AccessKey Secret。
登錄物聯(lián)網(wǎng)平臺(tái)控制臺(tái),將鼠標(biāo)移至賬號(hào)頭像上,然后單擊AccessKey管理,獲取AccessKey ID和AccessKey Secret。
accessSecret
consumerGroupId
當(dāng)前物聯(lián)網(wǎng)平臺(tái)對(duì)應(yīng)實(shí)例中的消費(fèi)組ID。
登錄物聯(lián)網(wǎng)平臺(tái)控制臺(tái),在對(duì)應(yīng)實(shí)例的
查看您的消費(fèi)組ID。iotInstanceId
實(shí)例ID。您可在物聯(lián)網(wǎng)平臺(tái)控制臺(tái)的實(shí)例概覽頁面,查看當(dāng)前實(shí)例的ID。
若有ID值,必須傳入該ID值。
若無實(shí)例概覽頁面或ID值,傳入空值,即
iotInstanceId = ""
。
clientId
表示客戶端ID,需您自定義,長(zhǎng)度不可超過64個(gè)字符。建議使用您的AMQP客戶端所在服務(wù)器UUID、MAC地址、IP等唯一標(biāo)識(shí)。
AMQP客戶端接入并啟動(dòng)成功后,登錄物聯(lián)網(wǎng)平臺(tái)控制臺(tái),在對(duì)應(yīng)實(shí)例的 頁簽,單擊消費(fèi)組對(duì)應(yīng)的查看,消費(fèi)組詳情頁面將顯示該參數(shù),方便您識(shí)別區(qū)分不同的客戶端。
connectionCount
啟動(dòng)AMQP客戶端的連接數(shù),最大不超過128個(gè)。用于實(shí)時(shí)消息推送的擴(kuò)容。
消費(fèi)組詳情頁面會(huì)以
${clientId}+"-"+數(shù)字
形式,顯示連接的客戶端。其中數(shù)字最小值為0。host
AMQP接入域名。
${YourHost}
對(duì)應(yīng)的AMQP接入域名信息,請(qǐng)參見查看和配置實(shí)例終端節(jié)點(diǎn)信息(Endpoint)。運(yùn)行
AmqpClient.java
程序。成功:返回類似如下日志信息,表示AMQP客戶端已接入物聯(lián)網(wǎng)平臺(tái)并成功接收消息。
topic = /***********/******/thing/event/property/post, message = 2**************7, content = {"temperature":29,"humidity":29,"time":1617357297270}
參數(shù)
說明
topic
設(shè)備屬性上報(bào)的Topic。
messageId
消息的ID。
content
消息的內(nèi)容。
失敗:例如代碼或網(wǎng)絡(luò)環(huán)境有問題,AMQP客戶端連接物聯(lián)網(wǎng)平臺(tái)會(huì)失敗。
您可根據(jù)日志提示,檢查代碼或網(wǎng)絡(luò)環(huán)境,然后修正問題,重新運(yùn)行代碼。
通過RAM角色授權(quán)的RAM用戶接收服務(wù)端訂閱消息
前提條件
RAM用戶已通過RAM角色授權(quán)獲取企業(yè)A阿里云賬號(hào)物聯(lián)網(wǎng)平臺(tái)的服務(wù)端訂閱操作權(quán)限。具體操作,請(qǐng)參見本賬號(hào)RAM用戶授權(quán)服務(wù)端訂閱、跨賬號(hào)RAM用戶授權(quán)服務(wù)端訂閱。
接入示例
下載Demo代碼包,然后解壓。
打開IntelliJ IDEA,導(dǎo)入Demo包中的示例工程amqp-sts-demo。
在
pom.xml
文件中,已添加Maven依賴,下載Qpid JMS客戶端。在
src/main/java/com/aliyun/iotx/demo
目錄下AmqpStsTokenClient.java
文件中,參照下表,修改AMQP的接入信息。重要請(qǐng)確保參數(shù)值輸入正確,否則AMQP客戶端接入會(huì)失敗。
STS Token有效期最長(zhǎng)1個(gè)小時(shí),需要定時(shí)更新AMQP客戶端接入中的建連信息,以確保AMQP客戶端正常重連成功。具體修改方式可參考示例Demo代碼中的
scheduledExecutorService.scheduleAtFixedRate
部分。本示例Demo代碼中,添加了結(jié)束程序的代碼(
Thread.sleep(6000 * 1000);
),即程序啟動(dòng)成功,運(yùn)行一分鐘后會(huì)結(jié)束。實(shí)際場(chǎng)景中,您可根據(jù)需要自行設(shè)置運(yùn)行時(shí)間。
更多參數(shù)說明,請(qǐng)參見AMQP客戶端接入說明。
參數(shù)
說明
CONNECTION_COUNT
啟動(dòng)AMQP客戶端的連接數(shù),最大不超過128個(gè)。用于實(shí)時(shí)消息推送的擴(kuò)容。
本賬號(hào)物聯(lián)網(wǎng)平臺(tái)的消費(fèi)組詳情頁面會(huì)以
"clientId-"+數(shù)字
形式,顯示連接的客戶端。其中數(shù)字最小值為0。DURATION_SECONDS
連接參數(shù)Token有效期,不能超過1小時(shí),取值范圍:15~60分鐘。
STS_ENDPOINT
STS Token獲取服務(wù)接入點(diǎn)。具體信息,請(qǐng)參見服務(wù)接入點(diǎn)。
STS_ACCESS_KEY
扮演企業(yè)A阿里云賬號(hào)下RAM角色的RAM用戶的AccessKey ID和AccessKey Secret。
STS_ACCESS_SECRET
STS_ROLE_ARN
企業(yè)A阿里云賬號(hào)下要扮演的RAM角色ARN,格式為
acs:ram::<account-id>:role/<role-name>
。其中,
<role-name>
部分會(huì)將角色的名稱全部轉(zhuǎn)換為小寫。創(chuàng)建角色后,您可以單擊角色名稱,在基本信息區(qū)域查看角色ARN。CONSUMER_GROUP_ID
企業(yè)A阿里云賬號(hào)下服務(wù)端訂閱的消費(fèi)組ID。
可在物聯(lián)網(wǎng)平臺(tái)控制臺(tái)對(duì)應(yīng)實(shí)例的
頁簽,查看消費(fèi)組ID。IOT_INSTANCE_ID
企業(yè)A阿里云賬號(hào)下物聯(lián)網(wǎng)平臺(tái)實(shí)例ID。
可在物聯(lián)網(wǎng)平臺(tái)控制臺(tái)的實(shí)例概覽頁簽,查看實(shí)例的ID。
若有ID值,必須傳入該ID值。
若無實(shí)例概覽頁簽或ID值,傳入空值,即
IOT_INSTANCE_ID = ""
。
HOST
企業(yè)A阿里云賬號(hào)下物聯(lián)網(wǎng)平臺(tái)實(shí)例的AMQP接入域名。具體信息,請(qǐng)參見查看和配置實(shí)例終端節(jié)點(diǎn)信息(Endpoint)。
運(yùn)行
AmqpStsTokenClient.java
程序。成功:返回類似如下日志信息,表示AMQP客戶端已接入物聯(lián)網(wǎng)平臺(tái)并成功接收消息。
topic = /***********/******/thing/event/property/post, message = 2**************7, content = {"temperature":29,"humidity":29,"time":1617357297270}
參數(shù)
說明
topic
設(shè)備屬性上報(bào)的Topic。
messageId
消息的ID。
content
消息的內(nèi)容。
失敗:例如代碼或網(wǎng)絡(luò)環(huán)境有問題,AMQP客戶端連接物聯(lián)網(wǎng)平臺(tái)會(huì)失敗。
您可根據(jù)日志提示,檢查代碼或網(wǎng)絡(luò)環(huán)境,然后修正問題,重新運(yùn)行代碼。
相關(guān)文檔
服務(wù)端訂閱消息相關(guān)錯(cuò)誤碼,請(qǐng)參見消息相關(guān)錯(cuò)誤碼。