服務(wù)端開發(fā)
阿里云主賬號或?qū)?yīng)RAM用戶的AccessKey ID和AccessKey Secret。
登錄物聯(lián)網(wǎng)平臺控制臺,將鼠標(biāo)移至賬號頭像上,然后單擊AccessKey管理,獲取AccessKey ID和AccessKey Secret。
對服務(wù)端進(jìn)行業(yè)務(wù)開發(fā),實(shí)現(xiàn)接收設(shè)備數(shù)據(jù)和下發(fā)控制指令。本文以Java腳本為例,演示接收設(shè)備數(shù)據(jù)和下發(fā)控制指令。
準(zhǔn)備開發(fā)環(huán)境
本文使用Java開發(fā)環(huán)境如下:
操作系統(tǒng):Windows 10 64位
JDK版本:JDK8
集成開發(fā)環(huán)境:IntelliJ IDEA社區(qū)版
業(yè)務(wù)服務(wù)器接收設(shè)備數(shù)據(jù)
服務(wù)器通過AMQP客戶端接收消息,需配置AMQP客戶端接入物聯(lián)網(wǎng)平臺,監(jiān)聽設(shè)備消息,請參見AMQP客戶端接入說明、Java SDK接入示例。
示例使用Java開發(fā)語言,推薦使用Apache Qpid JMS客戶端。您可訪問Qpid JMS 0.57.0,查看Qpid JMS客戶端使用說明。
參照以下步驟,完成AMQP客戶端開發(fā)。
下載Demo代碼包,并解壓。
打開IntelliJ IDEA,導(dǎo)入Demo包中的示例工程amqp-demo。
在pom.xml文件中,已添加Maven依賴,下載Qpid JMS客戶端。
在src/main/java/com.aliyun.iotx.demo目錄下AmqpClient.java文件中,參照下表,修改JMS客戶端接入物聯(lián)網(wǎng)平臺代碼中的參數(shù)值。
private final static Logger logger = LoggerFactory.getLogger(AmqpClient.class); private static String accessKey = "${YourAccessKey}"; private static String accessSecret = "${YourAccessSecret}"; private static String consumerGroupId = "${YourConsumerGroupId}"; //iotInstanceId:實(shí)例ID。 private static String iotInstanceId = "${YourIotInstanceId}"; //控制臺服務(wù)端訂閱中消費(fèi)組狀態(tài)頁客戶端ID一欄會顯示clientId參數(shù)。 //建議使用機(jī)器UUID、MAC地址、IP等唯一標(biāo)識作為clientId。便于您區(qū)分識別不同的客戶端。 private static String clientId = "${YourClientId}"; //${YourHost}為接入域名,請參見AMQP客戶端接入說明文檔。 private static String host = "${YourHost}"; // 指定單個(gè)進(jìn)程啟動的連接數(shù) // 單個(gè)連接消費(fèi)速率有限,請參考使用限制,最大128個(gè)連接 // 連接數(shù)和消費(fèi)速率及rebalance相關(guān),建議每500QPS增加一個(gè)連接 private static int connectionCount = 4;
參數(shù)
示例
說明
accessKey
LTAI4GFGQvKuqHJhFa******
阿里云主賬號或?qū)?yīng)RAM用戶的AccessKey ID和AccessKey Secret。
登錄物聯(lián)網(wǎng)平臺控制臺,將鼠標(biāo)移至賬號頭像上,然后單擊AccessKey管理,獲取AccessKey ID和AccessKey Secret。
accessSecret
iMS8ZhCDdfJbCMeA005sieKe******
consumerGroupId
VWhGZ2QnP7kxWpeSSjt******
已創(chuàng)建的充電寶業(yè)務(wù)數(shù)據(jù)處理消費(fèi)組ID,請參見云端配置開發(fā)的步驟6。
iotInstanceId
"iot-cn-6ja***"
設(shè)備所屬實(shí)例的ID。
您可在控制臺的實(shí)例概覽頁面查看。
若有ID值,必須傳入該ID值。
若無ID值,傳入空值,即
iotInstanceId = ""
。
clientId
12345
客戶端ID,可自定義,長度不可超過64個(gè)字符。建議設(shè)置為您的AMQP客戶端所在服務(wù)器UUID、MAC地址、IP等唯一標(biāo)識,方便您識別區(qū)分不同的客戶端。
AMQP客戶端接入成功后,在控制臺的充電寶業(yè)務(wù)數(shù)據(jù)處理的消費(fèi)組詳情頁面,顯示該參數(shù)。
connectionCount
4
啟動AMQP客戶端的連接數(shù),最大不超過128個(gè)。用于實(shí)時(shí)消息推送的擴(kuò)容。
消費(fèi)組詳情頁面會以
${clientId}+"-"+數(shù)字
形式,顯示連接的客戶端。其中數(shù)字最小值為0。host
iot-***.amqp.iothub.aliyuncs.com
AMQP接入域名,請參見查看和配置實(shí)例終端節(jié)點(diǎn)信息(Endpoint)。
業(yè)務(wù)服務(wù)器下發(fā)控制指令
服務(wù)器通過調(diào)用Pub接口下發(fā)控制指令:CMD,82923,ad322
。
參照以下步驟,完成服務(wù)端開發(fā),其中參數(shù)配置,請參見Java SDK使用說明、Pub。
在amqp-demo工程中的pom.xml文件中,添加Maven依賴,然后單擊Load Maven Changes圖標(biāo),完成依賴包下載。
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-iot --> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>7.41.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.6</version> </dependency>
在工程amqp-demo的路徑src/main/java/com.aliyun.iotx.demo下,創(chuàng)建Java類,輸入代碼。例如PubClient.java,代碼內(nèi)容如下。
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import java.util.*; import com.aliyuncs.iot.model.v20180120.*; public class PubClient { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("${RegionId}", "${accessKey}", "${accessSecret}"); IAcsClient client = new DefaultAcsClient(profile); PubRequest request = new PubRequest(); request.setIotInstanceId("${iotInstanceId}"); request.setProductKey("${productKey}"); request.setQos(0); request.setTopicFullName("/${productKey}/${deviceName}/user/cmd/down"); request.setMessageContent(Base64.getEncoder().encodeToString("CMD,82923,ad322".getBytes())); try { PubResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } }
配置相關(guān)參數(shù),替換以下參數(shù)為實(shí)際值。
參數(shù)
說明
${accessKey}
您賬號的AccessKey ID和AccessKey Secret。
您可在阿里云官網(wǎng)控制臺AccessKey管理中創(chuàng)建或查看您的AccessKey。
${accessSecret}
${RegionId}
您的物聯(lián)網(wǎng)平臺服務(wù)的地域代碼。
您可在物聯(lián)網(wǎng)平臺控制臺左上方,查看當(dāng)前服務(wù)所在地域。
地域代碼的表達(dá)方法,請參見地域列表。
${iotInstanceId}
您設(shè)備所屬實(shí)例的ID。您可在物聯(lián)網(wǎng)平臺控制臺的實(shí)例概覽頁面,查看當(dāng)前實(shí)例的ID。
若有ID值,必須傳入該ID值。
若無ID值,傳入空值即可。
${productKey}
您添加設(shè)備后,保存的設(shè)備證書信息。
您可在物聯(lián)網(wǎng)平臺控制臺的設(shè)備詳情頁面查看。
${deviceName}