edgexfoundry

 找回密码
 立即注册
搜索
热搜: meta core rules
查看: 13976|回复: 0

代码解读导出流程

[复制链接]

22

主题

31

帖子

722

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
722
发表于 2018-11-26 10:39:42 | 显示全部楼层 |阅读模式
1. application.java启动接收消息



2.ZeroMQEventSubscriber.javar接收消息转到spring integration 开始处理消息

3. 分发到 “export-inboud-events” 请求通道


4、ValidEventFilter.java处理“export-inboud-events”请求,此步检查valuedescriptor是否在库里已存在。
若设置了valuedescriptor.check=true,则对event中的reads中所有的valuedescriptor是否存在core-data库中valuedescriptor表中,存在下一步进入“valid-inbound-events”,否则进入“invalid-inbound-events”

查检无效的,打印日志就结束了,如下图:



有效的进入下面第5步

5、根据有效的注册的导出客户端,生成相应的消息,分别发给它们
有效是指 ExportRegistration 的 enable =true


6、进行设备过滤
若导出客户注册时,定义了ExportFilter,并包含了此设备ID ,才给导出,否则不导出给此客户端

7、如果导出客户端有定义filter的ValueDescriptor,则只导出定义的ValueDescriptor

8、转换成客户端想要的导出格式



9、处理压缩导出
默认不压缩

10、处理加密
默认不加密


11、根据客户端注册的导出协议,路由到指定的导出执行器进行导出
默认是MQTT,目前也支持rest、zmq(如导出给规则引擎)、AzureMQTT、IotCoreMQTT


MQTT导出如下:

Rest导出如下:
(注意:官网有个bug,需要如下图修改才可以导出)

Message<String> message = MessageBuilder.withPayload(exportString.getEventString())
                                        .setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON_VALUE).build();


12.打标记
更新event markpushed字段为导出时间,同时reads中的valuedescription的时间也会更新
注意,如果发现没有valuedescription会抛错,看下面图



至此,所有导出流程全部结束。


总结如下几点:


1)导出客户端注册时,相关的enable字段,filter字段(过滤设备ID与valueDescriptor)
2)默认导出json格式,还有azure-json、iotcore-json,也支持xml、序列化对象等导出
3)默认以MQTT 协议导出,同时支持rest、zmq等
4)导出结束时,给event对象打标志。更新event markpushed字段为导出时间,同时reads中的valuedescription的时间也会更新




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ号:15599633|管理员邮箱:admin@edgexfoundry.net|Archiver|手机版|小黑屋|edgexfoundry ( 赣ICP备19008954号 )

GMT+8, 2020-7-12 03:58 , Processed in 0.025317 second(s), 22 queries .

© 2018-2019 edgexfoundry.net

快速回复 返回顶部 返回列表