企业服务器与物联网平台通信

企业服务器与物联网平台通信
https://blog.csdn.net/weixin_44101331/article/details/86504614
目录
一,什么是服务端订阅
二,开发指南(.NET)
1,配置服务端订阅
2,接入 SDK
3,身份认证
4,设置消息接收接口
5,消息体格式
一,什么是服务端订阅
服务端可以直接订阅产品下配置的所有类型的消息。
目前,新版物联网平台通过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。
1,配置服务端订阅
登录物联网平台控制台。
左侧导航栏选择设备管理 > 产品。
在产品列表中,搜索到要配置服务端订阅的产品,并单击该产品对应的查看按钮,进入产品详情页。
单击服务端订阅 > 设置。
选择推送的消息类型。
设备上报消息:指产品下所有设备 Topic 列表中,具有发布权限的 Topic 中的消息。勾选后,可以通过 HTTP/2 SDK 接收这些消息。
设备状态变化通知:指一旦该产品下的设备状态变化时通知的消息,例如设备上线、下线的消息。设备状态消息的发送 Topic 为 /as/mqtt/status/ Y o u r P r o d u c t K e y / {YourProductKey}/ YourProductKey/{YourDeviceName}。勾选后,可以通过 HTTP/2 SDK 接收设备状态变化的通知消息。
2,接入 SDK
在工程中添加依赖包 iotx-as-http2-net-sdk.dll。
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("/KaTeX parse error: Expected 'EOF', got '#' at position 18: …ourProductKey}/#̲", new CustomHt…{YourProductKey}/#",messageCallback);用于设置回调。本示例中,设置为指定 Topic 回调。您可以设置为指定 Topic 回调,也可以设置为通用回调。
指定 Topic 回调
指定 Topic 回调的优先级高于通用回调。一条消息匹配到多个 Topic 时,按字典顺序优先调用,并且仅回调一次。
设置回调时,可以指定带通配符的 Topic,如 / Y o u r P r o d u c t K e y / {YourProductKey}/ YourProductKey/{YourDeviceName}/#
示例:
client.SetMessageListener("/alEddfaXXXX/device1/#",messageCallback);
//当收到消息的Topic,如"/alEddfaXXXX/device1/update",匹配指定Topic时,会优先调用该回调
1
2
通用回调
未指定 Topic 回调的消息,则调用通用回调。
设置通用回调方法:
new DefaultHttp2MessageCallback()
1
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);
1
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”
}
]
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Java是一种非常强大的编程语言,具有广泛的适用性,可用于实现各种应用程序,包括物联网(M2M)应用程序。针对M2M应用程序,一种常用的通信协议是MQTT协议。MQTT协议是一种轻量级通信协议,可用于设备和应用程序之间的数据传输。 要实现物联网(M2M)MQTT服务器与应用服务器之间的通信,我们可以使用Java编程语言和MQTT库。这些库可用于创建MQTT服务器和客户端,以实现设备和应用程序之间的通信。 首先,我们需要创建一个Mqtt服务器,可以使用Eclipse Paho MQTT库来实现。此库提供了一组API,可用于创建基于MQTT的应用程序。我们需要创建一个能够接收来自MQTT客户端的消息服务器,以及一个能够将消息发送到MQTT客户端的应用程序。 在服务器端,我们需要实现一个MQTT消息处理程序。我们可以使用MQTT客户端API来接收从客户端发来的消息,并将其处理为Java对象。然后,我们可以使用Java的网络编程来将这些对象传输到应用程序服务器。 在应用程序服务器上,我们可以使用Java编程语言和MQTT客户端库来接收MQTT服务器发来的消息。我们需要实现一个MQTT订阅程序,以便接收来自MQTT服务器的所有消息。 在实现物联网(M2M)MQTT服务器与应用程序服务器通信时,我们需要牢记安全性。 MQTT协议本身并不提供加密和认证机制,因此我们需要使用其他加密和认证机制(如TLS和SSL)来保护通信。我们还需要使用传输层安全(HTTPS)来防止未经授权的访问。 总之,Java编程语言和MQTT库可以用于实现物联网(M2M)MQTT服务器与应用程序服务器之间的通信。在实现过程中,我们需要特别注意安全问题,并使用适当的加密和认证机制来保护通信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

redelego@cloud

XXXXXXXXXXXXXXX

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

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

打赏作者

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

抵扣说明:

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

余额充值