SuperAPI AI 工具集

iii-pubsub

通用与其它

查看项目

更新于 10-15 22:17

技能介绍

iii-pubsub 是 iii 生态中基于主题的发布/订阅消息 worker,采用即发即弃(fire-and-forget)广播模型。发布方调用 publish 向命名主题发送事件,所有注册了 subscribe 触发器且主题精确匹配的订阅方都会收到原始负载,没有信封、没有持久化、没有重试;订阅方离线就会永久错过该事件。

主要能力:worker 暴露一个可调用函数 publish(函数 id 为裸名 "publish",无命名空间前缀)和一种触发器类型 subscribe。提供两个适配器:local(默认,内存广播通道,仅投递给同一引擎进程内的订阅者,无外部依赖)和 redis(配置 redis_url: ${REDIS_URL:redis://localhost:6379},借助 Redis Pub/Sub 在多个引擎实例间传播事件)。同一主题可有多个触发器订阅,各自收到独立副本,实现真正的扇出。

使用方式:先注册处理函数,例如 iii.registerFunction('notifications::on-order-shipped', handler);再注册触发器 iii.registerTrigger({ type: 'subscribe', function_id: 'notifications::on-order-shipped', config: { topic: 'orders.shipped' } })。处理函数直接收到 publish 传入的原始数据,不含主题字段;若一个处理函数服务多个主题,需在发布时把主题写进数据里。处理函数的返回值被忽略,且不会重试。

适用场景:消费者错过也无妨的实时通知、UI 实时更新、临时信号、遥测镜像;事件源无需了解消费者、需要松耦合的场合;通过 redis 适配器做跨实例的临时事件扇出。

限制:无持久化、无顺序保证、无重试,订阅方宕机会永久丢事件,若要求每个消费者都可靠处理每个事件,应改用 iii-queue 的 topic 模式 durable:subscriber。主题匹配为精确字符串相等,不支持通配符或层级模式,每个主题需单独注册触发器。空主题会被拒绝:publish 返回 topic_not_set,空主题注册的 subscribe 触发器永不触发。若需要键值或流变更响应,应使用 iii-state 或 iii-stream,iii-pubsub 承载的是离散事件而非状态。