目录

* 一,什么是服务端订阅
<https://blog.csdn.net/weixin_44101331/article/details/86504614#_1>
* 二,开发指南(.NET)
<https://blog.csdn.net/weixin_44101331/article/details/86504614#NET_6>
* 1,配置服务端订阅
<https://blog.csdn.net/weixin_44101331/article/details/86504614#1_8>
* 2,接入 SDK
<https://blog.csdn.net/weixin_44101331/article/details/86504614#2_SDK_17>
* 3,身份认证 <https://blog.csdn.net/weixin_44101331/article/details/86504614#3_19>
* 4,设置消息接收接口
<https://blog.csdn.net/weixin_44101331/article/details/86504614#4_60>
* 5,消息体格式
<https://blog.csdn.net/weixin_44101331/article/details/86504614#5_133>


<>一,什么是服务端订阅

服务端可以直接订阅产品下配置的所有类型的消息。

目前,新版物联网平台通过HTTP/2通道进行消息流转。配置HTTP/2服务端订阅后,物联网平台会将消息通过HTTP/2通道推送至服务端。通过接入HTTP/2
SDK,企业服务器可以直接从物联网平台接收消息。HTTP/2
SDK提供身份认证、Topic订阅、消息发送和消息接收能力,并支持设备接入和云端接入能力。HTTP/2
SDK适用于物联网平台与企业服务器之间的大量消息流转,也支持设备与物联网平台之间的消息收发。

:旧版物联网平台用户使用阿里云消息服务(MNS)进行消息流转,您可以将服务端订阅方式升级为HTTP/2方式。如果您继续使用在MNS这种方式,物联网平台将设备消息推送至MNS,服务端应用通过监听MNS队列接收设备消息。

<>二,开发指南(.NET)

介绍如何配置服务端订阅、接入HTTP/2 .NET版SDK、进行身份认证和设置消息接收接口。以下简单介绍服务端订阅的开发流程。有关SDK配置的具体信息,请参考
Demo <https://download.csdn.net/download/weixin_44101331/10920221>。

<>1,配置服务端订阅

* 登录物联网平台控制台。
* 左侧导航栏选择设备管理 > 产品。
* 在产品列表中,搜索到要配置服务端订阅的产品,并单击该产品对应的查看按钮,进入产品详情页。
* 单击服务端订阅 > 设置。
* 选择推送的消息类型。

* 设备上报消息:指产品下所有设备 Topic 列表中,具有发布权限的 Topic 中的消息。勾选后,可以通过 HTTP/2 SDK 接收这些消息。
* 设备状态变化通知:指一旦该产品下的设备状态变化时通知的消息,例如设备上线、下线的消息。设备状态消息的发送 Topic 为
/as/mqtt/status/${YourProductKey}/${YourDeviceName}。勾选后,可以通过 HTTP/2 SDK
接收设备状态变化的通知消息。
<>2,接入 SDK

在工程中添加依赖包 iotx-as-http2-net-sdk.dll
<https://download.csdn.net/download/weixin_44101331/10920352>。

<>3,身份认证

使用服务端订阅功能,需要基于您的阿里云 AccessKey 进行身份认证并建立连接。

建立链接示例如下:
//阿里云accessKey:即您的账号的 AccessKey ID string accessKey = "xxxxxxxxxxxxxxx";
//阿里云accessSecret:即 AccessKey ID对应的 AccessKey Secret string accessSecret =
"xxxxxxxxxxxxxxx"; //regionId:为您的物联网平台服务地域 string regionId = "cn-shanghai";
//阿里云uid:您的账号 ID string uid = "xxxxxxxxxxxxxxx"; //domain string domain =
".aliyuncs.com"; //endpoint string endpoint = "https://" + uid +
".iot-as-http2." + regionId + domain; //连接参数配置 Profile profile = new Profile();
profile.AccessKey = accessKey; profile.AccessSecret = accessSecret; profile.
RegionId= regionId; profile.Domain = domain; profile.Url = endpoint; //清除堆积消息
profile.CleanSession = true; profile.GetAccessKeyAuthParams(); //构造客户端
IMessageClient client= new MessageClient(profile); //连接HTTP2通道,并接收消息 client.
DoConnection(new DefaultHttp2MessageCallback()); //指定topic回调 client.
SetMessageListener("/${YourProductKey}/#", new CustomHttp2MessageCallback());
* accessKey 即您的账号的 AccessKey ID, accessSecret 即 AccessKey ID对应的 AccessKey
Secret。请登录阿里云控制台,将光标移至您的账号头像上,在选项框中选择 accesskeys 查看您的 AccessKey ID 和 AccessKey
Secret;选择安全设置查看您的账号 ID。
* regionId为您的物联网平台服务地域。
<>4,设置消息接收接口

1,连接建立后,服务端会立即向 SDK 推送已订阅的消息。因此,建立连接时,需要实现消息接收接口。

消息接收接口如下:
public interface IHttp2MessageCallback { ConsumeAction Consume(
Http2ConsumeMessage http2ConsumeMessage); }
2,您需要通过 IHttp2MessageCallback接口的consume方法,来设置消息接收接口。

设置消息接收接口的方法如下:
public class DefaultHttp2MessageCallback : IHttp2MessageCallback { public
DefaultHttp2MessageCallback() { } //参数 Http2ConsumeMessage 是消息回执的消息体 public
ConsumeActionConsume(Http2ConsumeMessage http2ConsumeMessage) { Console.
WriteLine("receive : " + http2ConsumeMessage.MessageId); //自动回复ACK return
ConsumeAction.CommitSuccess; } }
3,参数 Http2ConsumeMessage 是消息回执的消息体。
消息体包含的内容如下:
public class Http2ConsumeMessage { //消息体 public byte[] Payload { get; set; }
//Topic public string Topic { get; set; } //消息ID public string MessageId { get;
set; } //QoS public int Qos { get; set; } //连接体 public Http2Connection
Connection{ get; set; } }
4,messageClient.setMessageListener("/${YourProductKey}/#",messageCallback);
用于设置回调。本示例中,设置为指定 Topic 回调。您可以设置为指定 Topic 回调,也可以设置为通用回调。

* 指定 Topic 回调
指定 Topic 回调的优先级高于通用回调。一条消息匹配到多个 Topic 时,按字典顺序优先调用,并且仅回调一次。
设置回调时,可以指定带通配符的 Topic,如 /${YourProductKey}/${YourDeviceName}/#
示例: client.SetMessageListener("/alEddfaXXXX/device1/#",messageCallback);
//当收到消息的Topic,如"/alEddfaXXXX/device1/update",匹配指定Topic时,会优先调用该回调
* 通用回调
未指定 Topic 回调的消息,则调用通用回调。
设置通用回调方法: new DefaultHttp2MessageCallback()
5,设置回复 ACK。
对于 QOS>0 的消息,消费后需要回复 ACK。SDK 支持自动回复 ACK 和手动回复 ACK。默认为自动回复 ACK。本示例中未设置回复
ACK,则默认为自动回复。

* 自动回复 ACK:设置为自动回复 ACK 后,若 IHttp2MessageCallback.consume 的返回值为
ConsumeAction.CommitSuccess 则 SDK 会发送 ACK;返回 ConsumeAction.CommitFailure
或抛出异常,则不会返回 ACK。对于 QOS>0 且未回复 ACK 的消息,服务端会重新发送。
* 手动回复 ACK:通过ConsumeAction.CommitFailure设置手动回复 ACK。
设置为手动回复 ACK 后,需要调用MessageClient.DoAck()方法回复 ACK,参数为 topic、messageId和连接体。
这些参数可以在接收消息中获取到。
手动回复 ACK 的方法: client.DoAck(connection, topic, messageId, delegate);
<>5,消息体格式

1,设备状态通知:
{ "status":"online|offline", //设备状态,online上线,offline离线 "productKey":
"12345565569", //设备所属产品的唯一标识 "deviceName":"deviceName1234", //设备名称 "time":
"2018-08-31 15:32:28.205", //发送通知的时间点 "utcTime":"2018-08-31T07:32:28.205Z",
//发送通知的UTC时间点 "lastTime":"2018-08-31 15:32:28.195", //状态变更时最后一次通信时间
"utcLastTime":"2018-08-31T07:32:28.195Z", //状态变更时最后一次通信的UTC时间 "clientIp":
"123.123.123.123" //设备公网出口IP }

说明 为避免消息时序紊乱造成影响,建议您根据lastTime来维护最终设备状态。

2,设备生命周期变更:
{ "action" : "create|delete|enable|disable", "iotId" :
"4z819VQHk6VSLmmBJfrf00107ee201", "productKey" : "12345565569", "deviceName" :
"deviceName1234", "deviceSecret" : "", "messageCreateTime": 1510292739881 }

3,设备拓扑关系变更:
{ "action" : "add|remove|enable|disable", "gwIotId":
"4z819VQHk6VSLmmBJfrf00107ee200", "gwProductKey": "1234556554", "gwDeviceName":
"deviceName1234", "devices": [ { "iotId": "4z819VQHk6VSLmmBJfrf00107ee201",
"productKey": "12345565569", "deviceName": "deviceName1234" } ],
"messageCreateTime": 1510292739881 }

4,网关发现子设备上报:
{ "gwIotId":"4z819VQHk6VSLmmBJfrf00107ee200", "gwProductKey":"1234556554",
"gwDeviceName":"deviceName1234", "devices":[ { "iotId":
"4z819VQHk6VSLmmBJfrf00107ee201", "productKey":"12345565569", "deviceName":
"deviceName1234" } ] }

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信