多网关部署
Hermes 支持并发运行多个网关进程——每个 profile 一个(default、writer、admin、coder、researcher)。每个网关打开自己到各平台 API 的连接,并为其 profile 的订阅者投递消息。
任务订阅同时覆盖评审反馈。changes_requested 评审事件会作为可执行的 review-BLOCK 通知投递。使用 notify+wake 的订阅还会唤醒最初发起的聊天/线程/会话,以便控制器检查既有卡片与当前运行;notify 仍保持纯被动,wake 仍保持纯唤醒。评审反馈绝不会创建、解除阻塞、重新排队或以其他方式改动任务。
单一调度器姿态
只有一个网关拥有看板调度器。拥有调度器的网关保持 kanban.dispatch_in_gateway: true(默认值);其余所有网关将其设为 false。
为何重要: 调度是单属主的,这样多个网关不会争抢着派发同一份工作。通知投递则改为按 profile 归属:每个网关只轮询它所托管平台适配器对应 profile 的订阅。原子事件认领机制防止了跨 watcher 进程的重复投递。
配置
在拥有调度器的网关上(通常是 default profile),无需改动。在其余每个 profile 网关上,向 ~/.hermes/config.yaml 添加:
kanban:
dispatch_in_gateway: false
或设置环境变量:HERMES_KANBAN_DISPATCH_IN_GATEWAY=false
各网关的职责
| 网关角色 | dispatch_in_gateway | 是否打开已订阅看板数据库? | 调度器 | 通知器 |
|---|---|---|---|---|
| default(确认的调度锁属主) | true(默认) | 是 | 是 | 自有 profile + 旧的未打标订阅 |
| writer、admin、coder 等 | false | 是,当该 profile 有订阅时 | 否 | 该网关的自有 profile |
非调度网关仍为自己的平台适配器(Telegram、Discord 等)投递消息。它们不派发任务,并会跳过没有其 profile 所拥有订阅的看板。