|
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
|