阿里物联网平台(IOT)——业务服务器获取阿里iot平台接入设备的实时设备采集数据

                                  基于HTTP/2通道的服务端订阅-设备状态和数据

一、服务端订阅

  1. 服务端订阅流程

    1. 在IoT场景,有时候我们期望业务服务器能接收到设备状态和设备采集的数据,而不是通过云产品中转,

      这时我们可以开启服务端订阅,IoT平台会把设备产生的消息通过HTTP/2通道推送到业务服务器,以便根据自身业务场景消费。

      注:HTTP/2是方便、快捷、低延时,小堆积的消息流转通道,不是队列。目前是只有java8客户端sdk。 如果业务数据流非常大, 需要支持海量消息堆积,建议通过规则引擎流转队列方式处理。

      不论那个方式,消费端还是需要提升自身消费速率才能高效处理业务消息。

  2. 服务端订阅SDK

    注:目前仅提供Java8版SDK
    1. java sdk依赖
      1. <!-- Aliyun core -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>3.7.1</version>
        </dependency>
        
        <!-- iot message client -->
        <dependency>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>iot-client-message</artifactId>
            <version>1.1.2</version>
        </dependency>
    2. 消费iot平台设备实时采集数据
      1. import java.net.UnknownHostException;
        import java.util.concurrent.ExecutionException;
        
        import com.aliyun.openservices.iot.api.Profile;
        import com.aliyun.openservices.iot.api.message.MessageClientFactory;
        import com.aliyun.openservices.iot.api.message.api.MessageClient;
        import com.aliyun.openservices.iot.api.message.callback.MessageCallback;
        import com.aliyun.openservices.iot.api.message.entity.Message;
        
        public class H2Client {
        
            public static void main(String[] args) throws UnknownHostException, 
                                        ExecutionException, InterruptedException {
                // 身份
                String accessKey = "阿里云accessKey";
                String accessSecret = "阿里云accessSecret";
                String regionId = "cn-shanghai";
                String uid = "阿里云账号 uid";
                String endPoint = "https://" + uid + ".iot-as-http2." 
                                        + regionId + ".aliyuncs.com";
                // 连接配置
                Profile profile = Profile.getAccessKeyProfile(endPoint, regionId, 
                                                            accessKey, accessSecret);
        
                // 构造客户端
                MessageClient client = MessageClientFactory.messageClient(profile);
                // 数据接收
                client.connect(messageToken -> {
                    Message m = messageToken.getMessage();
                    System.out.println("\ntopic="+m.getTopic());
                    System.out.println("payload=" + new String(m.getPayload()));
                    System.out.println("generateTime=" + m.getGenerateTime());
                    // 此处标记CommitSuccess已消费,IoT平台会删除当前Message,
                    // 否则会保留到过期时间
                    return MessageCallback.Action.CommitSuccess;
                });
            }
        }

        注:目前服务端订阅是基于uid的,所有产品的消息都会被HTTP/2的client端消费,这时需要我们自己根据topic包含的productKey/deviceName区分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Qubb

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值