跳转到内容

事件与 webhook 平台

事件平台(modules/eventingLIVE)将引擎的进程内事件总线变为一个 对外的订阅面。总线本身是至多一次(at-most-once)且在关机时丢弃的,而本模块则是 持久性边界:一旦事件被捕获进捕获事务,投递就是持久且可审计的。它的路由挂载在 /v1/m/eventing/ 之下。

一个订阅记录了它所要的事件类型、一个可选的来源过滤器、一个消费方端点 URL、其投递所 授权的角色,以及一个由服务端生成的 HMAC 签名密钥(仅返回一次,此后只通过密封静态存储 (sealed-at-rest)的接缝持有)。可订阅的类型来自一份类型化目录——GET /event-types 返回每个类型及其稳定性层级和对其设门控的权限。管理订阅是特权且受审计的操作: create/update/rotate-secret 属写入层;delete、replay、redeliver 和测试投递属管理员层。

投递是带消费方幂等键的至少一次(at-least-once)——精确一次(exactly-once)已被拒绝, 因为它是一个虚假的承诺。每个被捕获的事件会为每个匹配的订阅生成一行持久投递记录,并在同一 事务中入队。工作进程通过乐观版本号认领记录(在高可用下安全),POST 经签名的事件信封, 然后要么确认(2xx),要么安排下一次尝试:

  • 重试/退避——408/425/429/5xx 和网络错误按退避计划重试;任何其他状态都是终止性的。 从不跟随重定向。
  • 死信队列——耗尽尝试次数的投递落入 dead 状态;denied 状态记录了一次针对单个事件的 RBAC 拒绝。
  • 游标回放——一个按租户单调递增的序列(从游标行分配,而非 max(seq))让你能从持久日志中 的某一点回放,受保留窗口限制。

每次尝试都携带 Stripe 风格的带时间戳 HMAC-SHA256 签名,外加一个稳定的事件 id 作为幂等键。 在每次尝试之前,调度器会针对该订阅的角色运行完整的默认拒绝(deny-closed)RBAC+ABAC 管道, 因此一个外发事件被过滤的方式与一次实时读取完全相同。

  • **进程内总线是至多一次(at-most-once)**且在关机时丢弃;持久性始于捕获事务,而非发布时刻。 在没有任何已启用订阅匹配时发布的事件不会被捕获(节省存储),因此回放只能回溯到捕获处。
  • 多节点 NATS 桥接如实地是至多一次(at-most-once)——本平台是其上的持久层, 而非对分布式总线本身的保证。
  • 它是面向集成方的面;notify 仍是面向运维方的告警路由器。关于 live / on-demand / deny-closed 的约定,参见 诚实与限制
  • SIEM 转发——将密封的审计账本(audit ledger)和发现项 发送至 SIEM 塔;直接构建于本平台之上。
  • Notify——面向运维方、投递至已配置目的地的告警路由器。
  • 事件参考——你所订阅的事件词汇表以及所投递信封的形状。