Skip to content

订阅与回流 ​

虹元有两套方向相反的"订阅",名字相近,语义相反,先分清:

名称方向谁动游标
事件订阅虹元到消费方(智悟、HSE 等)消费方拉取,虹元可选推送事件编号
数据集订阅业务系统到虹元虹元按调度拉取更新时间加主键

回流是第三件事:消费方把裁定与处置写回虹元,虹元再把裁定回流给边缘节点。

事件订阅 ​

为什么是游标拉取 ​

推送必然会失败。游标把这件事翻过来:消费方说"我处理到第 N 条了",漏没漏它自己清楚。推送掉了不影响正确性,下次拉取自然补上。

接口 ​

接口作用
POST /api/uancore/events/subscribe登记消费方:过滤条件、可选推送地址、起始游标。幂等,重复登记不动游标
GET /api/uancore/events/since?consumer=<消费方>按游标拉取,返回 items、nextCursor、hasMore
POST /api/uancore/events/ack确认处理到哪了,游标只在这里前进
GET /api/uancore/events/subscriptions订阅清单与落后量
GET /api/uancore/events/list运营侧分页查询,可按租户、类型、裁定筛选
GET /api/uancore/stats/window按时间窗出计数,见下文
GET /api/uancore/events/{id}/timeline单条事件的处置时间线,见处置与归并

登记字段:消费方标识(必填)、租户码、事件类型列表、最低严重度(低、中、高、紧急)、推送地址、签名密钥引用(只存引用不存明文)、起始游标、启用状态。登记需要管理密钥。

不传起始游标时从当前最新开始,从 0 开始会把历史全量重放一遍。

拉取每批默认 200 条,上限 1000。nextCursor 取本批最后一条的编号,被过滤掉的也算在内。

测试事件默认不拉、不推。做联调验证的消费方拉取时带 include_test=true,才连测试事件一起拿。

安全水位 ​

事件编号来自序列,先分配后提交,编号大的可能先可见。拉取只返回入库时刻早于 2 秒前的记录,避免消费方跳过一条还在提交中的事件。

可选推送 ​

登记了推送地址的订阅,虹元每 3 秒推一轮,单轮单订阅最多 100 条。推送带 X-Uan-Consumer 头,配了签名密钥时另带时间戳与 HMAC 签名。失败按次数指数退避,封顶 600 秒,不停用订阅。

推送只推不动确认游标,游标由消费方确认前进。推送失败最坏的结果是对方晚一点通过拉取拿到,不会丢。

消费方可以在推送回执里点名要证据图,现场虹元直传到对方的对象存储,见证据直传。

消费方怎么写 ​

  1. 启动时登记订阅,重复登记无害。
  2. 循环:拉取一批,处理,确认到本批最后一条。处理失败不确认,下次重拉。
  3. 处理要幂等:同一条事件可能因为没确认而再来一次。

智悟就是这样接的:无本地库,游标在虹元,重启从确认位置继续。

按时间窗计数 ​

GET /api/uancore/stats/window?tenant_code=<租户码>&since=<起>&until=<止>

给周报、月报取数。翻页查询数不全,全时段统计又切不了周和月,所以单开一个只回计数的口。三个参数都必填,时间写 RFC3339,窗口左闭右开,一次最多 93 天。凭据同事件查询,客户会话只能取自己租户。

组落窗口径分组键
events事件发生时刻来源(视频或随手拍)、告警或观测、事件类型、裁定、是否测试、是否有机器判定、判定类型
tasks任务建单时刻,跳过已删类型、状态、所挂事件是否测试、所挂事件的来源、是否超时、是否升级过
knowledge知识落库时刻,跳过已删类型

每组按计数降序。只回计数,不回明细。回包另带出数时刻 asOf,判任务超时以它为准。一租户一库时各库分别聚合再相加。单条聚合超过 15 秒回 503,缩短窗口再取。

回流 ​

消费方写回裁定 ​

POST /api/uancore/events/{id}/verdict
字段说明
verdict属实、误报、并入,三者之外拒绝
by裁定人标识,工号或系统标识
note备注,误报时必填
merged_into并入时必填
judged_*可选,机器判定:类型、置信、判定方、模型版本、口径版本等
disposition可选,处置决定:类型、严重度、通道、时限、消息、任务编号、摘要
tenant_code可选,声称租户,不符则拒绝

已裁定的幂等返回,不覆盖。裁定变更本身是需要留痕的事实,要改只能新开更正记录。写入不改事件本体。

虹元回流边缘节点 ​

裁定写入后,虹元向事件里的回流地址推送:本地告警编号、事件编号、裁定、操作者、原因。节点据此把本地告警从待定改成属实或误报。不回流,节点库里的告警永远停在待定,分母一直涨、分子永远为空,误报率就算不出来。

回流尽力而为:节点不可达不让裁定失败,响应里如实带 pushedBack 与错误,界面能显示"已裁定,回流失败"。

任务处置进展(接手、完成、超时升级)同样按事件推给节点,节点记到告警的处置备注里。

数据集订阅 ​

业务系统(随手拍、智营、智建等)向虹元开放只读数据集,虹元按调度拉取。五条原则:

  • 只读。 接口只有 GET,没有任何写入、删除或触发动作的接口。
  • 单向。 数据从业务系统流向虹元,没有反向通道。
  • 虹元不连业务数据库。 包括只读账号在内,不持有任何业务库凭据。
  • 字段范围由服务端定。 禁止外流的字段在实现里就不查询、不返回。
  • 拉取而非推送。 业务系统不需要知道虹元地址,不用做重试与积压。

业务系统要提供两个接口:

接口作用
GET /api/subscribe/v1/datasets数据集清单自描述:键、结构版本、粒度、度量、更新频率、最早数据
GET /api/subscribe/v1/datasets/{key}?cursor=&limit=&tenant=按游标取增量,每页默认 1000 行,上限 5000

游标是"更新时间加主键"的复合值,边界严格大于,同一游标重复请求返回相同结果。更正推进更新时间再入增量流,删除表现为标记。鉴权与事件接入同一套 HMAC 机制,限流默认每调用方每分钟 60 次,单次查询超过 10 秒返回错误。均值类字段不直接提供,给总和与计数;比率类给分子与分母。业务系统单方面加字段而契约未更新时,虹元拒收该批次并告警。

虹元侧的数据源、调度节拍与同步状态在控制台"数据源与同步状态"页配置,有新行落库才加工一次,全量重算忽略游标从头拉。

分级上行 ​

单套虹元扛不住多场站,或现场要求站端断网期间业务照常时,站端各装一套虹元向总部上行。站端只填一个总部地址,总部不需要预先知道有几个站。

配置说明
UANCORE_INSTANCE站端实例名,必须全局唯一
UANCORE_UPLINK_URL总部地址,配了才启用上行
UANCORE_UPLINK_INTERVAL_MS轮询间隔,默认 3000,下限 200
UANCORE_UPLINK_BATCH单批条数,默认 200,上限 1000

两条通道各一个游标:events 按编号推新事件,verdicts 按裁定时间推裁定变更。断链期间游标不动,恢复后从断点续推,不丢不重。总部按"租户加幂等键"去重。GET /api/uancore/uplink/status 同时回答站端推得怎么样与总部收到了谁的数据。能用集中式就别上分级,多一级就多一处可能不一致的地方。

相关文档 ​

沅虹科技 · 智建管建设,智安保稳产,智觉察现场,智悟定行动