马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
EdgeX Core Service 核心服务之 Core Command 下令
一、概述
Core-command(通常称为下令和控制微服务)可以代表以下角色向设备和传感器发出下令或动作:
- EdgeX Foundry中的其他微服务(例如,本地边缘分析或规则引擎微服务)
- EdgeX Foundry与同一系统上大概存在的其他应用程序(例如,需要关闭传感器的系统管理署理)
- 对于需要下令这些设备的任何外部系统(例如,一个基于云的应用程序确定了需要修改一组设备上的设置)
Command微服务以通用的标准化方式公开下令,以简化与设备的通讯。
- GET 下令从设备请求数据,这通常用于请求设备最新的传感器读数
- SET 下令请求采取操作或启动设备或在设备上设置某些配置。
Command微服务从metadata服务获取有关设备和传感器的知识。
Command微服务始终通过设备服务将下令和动作中继到设备和传感器,并且从不直接与设备或传感器通讯。
因此,Command微服务是从EdgeX Foundry的北侧(例如规则引擎和导出设备)到特定协议的设备或传感器以及EdgeX Foundry和网关的关联设备服务侧的下令或操作请求的转换器。
Command微服务不答应通过设备服务与设备和传感器进行不须要的交互,从而在设备和传感器周围提供了一层保护。可以添加额外的安全性,不答应与设备进行未经授权的交互(通过设备服务)。还可以调治设备上的请求数目,以免设备负载过重,如果有特殊需要,乃至可以缓存请求的相应,以避免唤醒设备。
二、通过消息通报下令
2.1 介绍
从前,从第三方系统(企业应用程序、云应用程序等)到 EdgeX 的通讯只能通过 REST 完成,以便驱动设备或从传感器获取最新信息。第三方系统对下令服务进行 REST 调用,然后将请求中继到也利用 REST 的设备服务。没有内置方法可以向 EdgeX 或其管理的设备/传感器发出基于消息的请求。
从 Levski(V2.3) 版本开始,核心下令服务添加了对外部 MQTT 连接的支持(与应用程序服务提供外部 MQTT 连接的方式雷同), 这将使其可以或许充当内部消息总线(通过 MQTT 或 Redis Pub/Sub 实现)和外部 MQTT 消息总线之间的桥梁。
作为消息总线桥的核心下令
Core Command 服务将作为 EdgeX 入口点,通过消息总线向南向设备发送下令。
第三方系统不应被授予访问 EdgeX 内部消息总线的权限。因此,为了通过消息总线(特别是 MQTT)实现通讯,下令服务需要从第三方或外部 MQTT 主题获取消息,并将它们内部通报到 EdgeX 内部消息总线,终极将它们路由到设备服务然后到设备/传感器(南向)。
相反,来自南向设备的相应消息也将通过内部 EdgeX 消息总线发送到下令服务,然后它们可以桥接到外部 MQTT 主题并相应第三方系统请求者。
2.2 消息结构
由于大多数消息总线协议缺乏通用消息头机制(如 HTTP),因此提供请求/相应元数据是通过界说与每个请求/相应关联的 MessageEnvelope 对象来完成的。消息主题名称的作用类似于 REST 请求中的 HTTP 路径和方法。也就是说,主题名称指定任何下令请求的设备接收者,就像 HTTP 请求中的路径一样。
下面是下令查询请求的 MessageEnvelope 示例:
- {
-
- "apiVersion" : "v3",
- "RequestId": "e6e8a2f4-eb14-4649-9e2b-175247911369",
- "CorrelationID": "14a42ea6-c394-41c3-8bcd-a29b9f5e6835",
- "ContentType": "application/json",
- "QueryParams": {
-
- "offset": "0",
- "limit": "10"
- }
- }
复制代码
下面是下令查询相应的 MessageEnvelope 示例:
- {
-
- "ApiVersion":"v2",
- "RequestID":"e6e8a2f4-eb14-4649-9e2b-175247911369",
- "CorrelationID":"14a42ea6-c394-41c3-8bcd-a29b9f5e6835",
- "ErrorCode":0,
- "Payload":"...",
- "ContentType":"application/json"
- }
复制代码
格式化请求和相应的消息共享一个公共的基础结构。最外层的 JSON 对象表现消息封装,用于通报有关请求/相应的元数据,包括 ApiVersion、RequestID、CorrelationID, ..等等。
Payload 字段包罗 base64 编码的相应正文。
ErrorCode 字段提供错误指示。ErrorCode 将为 0(无错误)或 1(指示错误)作为错误条件的两个罗列值。当出现错误时(ErrorCode 设置为 1),Payload 包罗一个消息字符串,指示有关错误的更多信息。如果没有错误(ErrorCode 0),则 Payload 中没有消息字符串。
2.3 下令查询
Core Command 服务订阅 QueryRequestTopic 并将相应发布到配置文件中界说的 QueryResponseTopic。收到请求后,Core Command 服务将尝试从请求主题级别解析 <device-name>。第三方系统或应用程序必须发布下令查询请求消息并订阅来自雷同主题的相应。以下是 Core Command 利用的默认主题命名:
- 订阅下令查询请求主题:edgex/commandquery/request/#
- 发布下令查询相应主题:edgex/commandquery/response
请求主题中的最后一个主题级别必须是 #(all) 或要查询的 <device-name>。
2.3.1 按设备名称查询
通过消息通报按设备名称查询设备核心下令的示例:
1、向外部 MQTT 署理发送关于主题的查询请求消息 edgex/commandquery/request/Random-Boolean-Device:
- {
-
- "apiVersion" : "v3",
- "ContentType": "application/json",
- "CorrelationID": "14a42ea6-c394-41c3-8bcd-a29b9f5e6835",
- "RequestId": "e6e8a2f4-eb14-4649-9e2b-175247911369"
- }
复制代码
edgex/commandquery/response:
- {
-
- "ReceivedTopic":"",
- "CorrelationID":"14a42ea6-c394-41c3-8bcd-a29b9f5e6835",
- "ApiVersion":"v2",
- "RequestID":"e6e8a2f4-eb14-4649-9e2b-175247911369",
- "ErrorCode":0,
- "Payload":"eyJhcGlWZXJzaW9uIjoidjIiLCJyZXF1ZXN0SWQiOiJlNmU4YTJmNC1lYjE0LTQ2NDktOWUyYi0xNzUyNDc5MTEzNjkiLCJzdGF0dXNDb2RlIjoyMDAsImRldmljZUNvcmVDb21tYW5kIjp7ImRldmljZU5hbWUiOiJSYW5kb20tQm9vbGVhbi1EZXZpY2UiLCJwcm9maWxlTmFtZSI6IlJhbmRvbS1Cb29sZWFuLURldmljZSIsImNvcmVDb21tYW5kcyI6W3sibmFtZSI6IldyaXRlQm9vbFZhbHVlIiwic2V0Ijp0cnVlLCJwYXRoIjoiL2FwaS92Mi9kZXZpY2UvbmFtZS9SYW5kb20tQm9vbGVhbi1EZXZpY2UvV3JpdGVCb29sVmFsdWUiLCJ1cmwiOiJodHRwOi8vZWRnZXgtY29yZS1jb21tYW5kOjU5ODgyIiwicGFyYW1ldGVycyI6W3sicmVzb3VyY2VOYW1lIjoiQm9vbCIsInZhbHVlVHlwZSI6IkJvb2wifSx7InJlc291cmNlTmFtZSI6IkVuYWJsZVJhbmRvbWl6YXRpb25fQm9vbCIsInZhbHVlVHlwZSI6IkJvb2wifV19LHsibmFtZSI6IldyaXRlQm9vbEFycmF5VmFsdWUiLCJzZXQiOnRydWUsInBhdGgiOiIvYXBpL3YyL2RldmljZS9uYW1lL1JhbmRvbS1Cb29sZWFuLURldmljZS9Xcml0ZUJvb2xBcnJheVZhbHVlIiwidXJsIjoiaHR0cDovL2VkZ2V4LWNvcmUtY29tbWFuZDo1OTg4MiIsInBhcmFtZXRlcnMiOlt7InJlc291cmNlTmFtZSI6IkJvb2xBcnJheSIsInZhbHVlVHlwZSI6IkJvb2xBcnJheSJ9LHsicmVzb3VyY2VOYW1lIjoiRW5hYmxlUmFuZG9taXphdGlvbl9Cb29sQXJyYXkiLCJ2YWx1ZVR5cGUiOiJCb29sIn1dfSx7Im5hbWUiOiJCb29sIiwiZ2V0Ijp0cnVlLCJzZXQiOnRydWUsInBhdGgiOiIvYXBpL3YyL2RldmljZS9uYW1lL1JhbmRvbS1Cb29sZWFuLURldmljZS9Cb29sIiwidXJsIjoiaHR0cDovL2VkZ2V4LWNvcmUtY29tbWFuZDo1OTg4MiIsInBhcmFtZXRlcnMiOlt7InJlc291cmNlTmFtZSI6IkJvb2wiLCJ2YWx1ZVR5cGUiOiJCb29sIn1dfSx7Im5hbWUiOiJCb29sQXJyYXkiLCJnZXQiOnRydWUsInNldCI6dHJ1ZSwicGF0aCI6Ii9hcGkvdjIvZGV2aWNlL25hbWUvUmFuZG9tLUJvb2xlYW4tRGV2aWNlL0Jvb2xBcnJheSIsInVybCI6Imh0dHA6Ly9lZGdleC1jb3JlLWNvbW1hbmQ6NTk4ODIiLCJwYXJhbWV0ZXJzIjpbeyJyZXNvdXJjZU5hbWUiOiJCb29sQXJyYXkiLCJ2YWx1ZVR5cGUiOiJCb29sQXJyYXkifV19XX19",
- "ContentType":"application/json",
- "QueryParams":{}
- }
复制代码
Base64 解码 Payload:
- {
-
- "apiVersion":"v2",
- "requestId":"e6e8a2f4-eb14-4649-9e2b-175247911369",
- "statusCode":200,
- "deviceCoreCommand"
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |