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能力。