HTTP2接入

更新时间:2018-10-25 11:35:09

1. 概述

HTTP转储功能适用于物联网平台间与企业服务器之间的大量消息流转,需要使用HTTP2 SDK。HTTP2 SDK提供身份认证、消息接收能力。

image.png | left | 827x259

  1. SDK接入 在项目中添加maven依赖
    <dependency>
     <groupId>com.aliyun.openservices</groupId>
     <artifactId>iot-client-message</artifactId>
     <version>1.0.0</version>
    </dependency>
    

2. 身份认证

身份认证需要使用AppKey和AppSecret,目前可以从控制台->服务调用->验证管理中获取,如图所示:

undefined

建连时使用MessageClient.connect(Profile, MessageCallback)方法,Profile需要提供EndPoint,AppKey和AppSecret,用于鉴权,MessageCallback为默认的消息回调,用于接收消息,参考消息回调接口
示例如下:


Profile profile = new Profile("${END_POINT}", "${APP_KEY}", "${APP_SECRET}");

MessageClient messageClient = MessageClientFactory.messageClient(Profile);
messageClient.connect(new MessageCallback() {
    @Override
    public boolean consume(MessageToken messageToken) {
        log.info("receive : " + new String(messageToken.getPayload()));
        return true;
    }
});

3. 节点信息

endpoint:
https://${productKey}.iot-as-http2.cn-shanghai.aliyuncs.com:443

4. 消息订阅

阅消息订阅需要在控制台配置,具体步骤:控制台->产品详情->设备详情->转储服务->HTTP2转储,选择您需要的消息类型并保存,如图所示:

undefined

5. 取消订阅

取消订阅步骤和控制台订阅类似,取消勾选订阅并保存即可。

6. 消息接收

连接建立后,服务端会立即向SDK推送已订阅的消息,因此建连时需要提供默认消息接收接口,用于处理未设置回调的消息。建议在connect之前,调用setMessageListener设置消息回调,参考指定Topic回调

6.1 消息接收接口

用户需要实现MessageCallback接口的consume方法,并调用client的setMessageListener()方法。
consume
示例如下:

MessageCallback messageCallback = new MessageCallback() {
    @Override
    public boolean consume(MessageToken messageToken) {
        log.info("receive : " + new String(messageToken.getMessage().getPayload()));
        return true;
    }
};
messageClient.setMessageListener("${TOPIC}",messageCallback);

consume方法返回值用于处理ACK,参考ACK。参数MessageToken为消息回执的消息体,用于获取消息体以及手动ack使用。

6.2 指定Topic回调

设置回调时,可以指定带通配符的Topic,如/${ProductKey}/{$DeviceName}/#
指定Topic的回调优先级高于通用回调,一条消息匹配到多个Topic时,按字典序优先调用,仅回调一次。
使用示例:

messageClient.setMessageListener("/Product_A/Device_B/#",messageCallback);
//当收到消息的Topic匹配到"/Product_A/Device_B/update"时,会优先调用该回调

6.3 通用回调

设置该回调后,设置未指定的topic回调的消息,会调用该回调。
使用示例:

messageClient.setMessageListener(messageCallback);
//当收到消息的topic未匹配到已指定的Topic时,调用该回调

6.4 ACK

对于QOS>0的消息,消费后需要回复ACK,SDK支持自动和手动ACK两种,通过MessageClient.setManualAcks设置是否手动回复ACK。默认为自动回复ACK

6.4.1 自动ACK

设置自动回复ACK后,MessageCallback.consumer的返回值表示是否处理成功,返回true会SDK发送ACK,返回false或抛出异常,不会返回ACK。服务端对于QOS>0且未回复ACK的消息,会重新发送。

6.4.2 手动ACK

设置手动回复ACK后,需要调用MessageClient.ack()方法回复ack,参数为MessageToken,在接收消息时可以得到该参数

messageClient.ack(messageToken);

results matching ""

    No results matching ""