RRPC支持調用自定義Topic與物聯網平臺通信,且相關Topic中包含了您自定義的完整Topic,可實現不同場景的通信需求。本文介紹RRPC自定義Topic和接入方法。
前提條件
已完成開發設備,支持設備通過自定義Topic與物聯網平臺通信。您可使用以下Link SDK開發設備:
自定義Topic
Topic | 格式 | 說明 |
---|---|---|
RRPC訂閱 | /ext/rrpc/+/${topic} | 您需訂閱物聯網平臺下發的RRPC請求消息中的自定義Topic。 |
RRPC請求消息 | /ext/rrpc/${messageId}/${topic} | 物聯網平臺下發的RRPC請求消息。 |
RRPC響應消息 | /ext/rrpc/${messageId}/${topic} | 設備上行的RRPC響應消息。 |
以上Topic格式中:
- ${topic}:您在物聯網平臺的完整自定義Topic,即為
/${productKey}/${deviceName}/user/${TopicShortName}
。其中
${TopicShortName}
為自定義的Topic類,即自定義Topic的后綴。更多信息,請參見自定義Topic。 - ${messageId}:服務端調用物聯網平臺的RRpc接口向設備下發消息時,物聯網平臺生成的唯一的RRPC消息ID,可用于區分不同的RRPC消息。
例如設備device1的自定義Topica18wP***/device1/user/get
,發起RRPC消息的Topic為/ext/rrpc/121307410***/a18wP***/device1/user/get
。
RRPC接入
- 從物聯網平臺發送RRPC消息。
服務端調用物聯網平臺API的RRpc接口向設備發送消息。更多信息,請參見RRpc。
以使用物聯網平臺云端Java SDK為例,調用方式如下。
使用自定義Topic格式時,您需要確保使用的物聯網平臺云端Java SDK(aliyun-java-sdk-iot)為6.0.0及以上版本。
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-iot</artifactId> <version>6.0.0</version> </dependency>
調用RRpc接口的示例:
RRpcRequest request = new RRpcRequest(); request.setProductKey("testProductKey"); request.setDeviceName("testDeviceName"); request.setRequestBase64Byte(Base64.getEncoder().encodeToString("hello world")); request.setTopic("/testProductKey/testDeviceName/user/get");//如果是自定義Topic調用方式,在這里傳遞自定義Topic。 request.setTimeout(3000); RRpcResponse response = client.getAcsResponse(request);
說明 請登錄OpenAPI開發者門戶,在線調用RRpc接口,查看物聯網平臺的多種語言云端SDK調用示例。 - 設備端接入。
- 對于使用C Link SDK、Android Link SDK、Python Link SDK的設備,無需做任何特殊操作。
- 對于使用Node.js Link SDK的設備,需要在開發設備前,將Link SDK下載到本地,修改src文件夾中的model.js文件,在genConnectPrarms函數的clientId中添加
ext=1
,再使用該Link SDK進行設備開發。原clientId為:
clientId:`${this.clientId}|securemode=${this.securemode },signmethod=hmac${this.signAlgorithm},timestamp=${this.timestamp},${extra}`,
添加
ext=1
后,clientId為:clientId:`${this.clientId}|securemode=${this.securemode },signmethod=hmac${this.signAlgorithm},timestamp=${this.timestamp},${extra},ext=1`,
- 設備端返回RRPC響應的Topic。
RRPC請求Topic和響應Topic格式一樣,直接將請求Topic作為響應Topic即可。
說明 目前,僅支持設備端返回QoS=0的RRPC響應消息。關于通過Python語言,調用設備端Link SDK響應RRPC的方法,請參見RRPC能力。