跳转至

扩展层队列

各渠道独立实现的并发控制队列,不依赖核心队列。


Discord

源文件: extensions/discord/src/internal/event-queue.ts

class DiscordEventQueue {
  // maxQueueSize=10000, maxConcurrency=50
  // listenerTimeout=120s(超时不抛,只记 timeoutCount)
  // slowListenerThreshold=30s(超时打 warn)
  enqueue({ eventType, listenerName, run }): Promise<void>
}
  • 满队直接 droppedCount++ 并 reject,不 block 调用方
  • 并发 50,超时 120s

QQ Bot

源文件: extensions/qqbot/src/engine/gateway/message-queue.ts

  • per-peer 队列:DM/guild/group 各自独立
  • 消息合并:group peer 支持 burst 期间多条普通消息合并为一次 turn
  • bot 消息优先驱逐:group 满队时优先丢弃 bot 消息
  • 容量:全局上限 1000 条,per-peer 20条(group 50条),最大并发 10 个 peer

飞书

源文件: extensions/feishu/src/sequential-queue.ts

// 极简 per-key 串行队列(promise chain)
createSequentialQueue()  (key, task) => Promise<void>

通用 KeyedAsyncQueue

源文件: src/plugin-sdk/keyed-async-queue.ts

// 每个 key 维护一个 promise 链(tail)
// 新任务追加在当前 tail 之后,保证同 key 任务串行
class KeyedAsyncQueue {
  private tails = new Map<string, Promise<void>>();
  enqueue<T>(key, task, hooks?): Promise<T>;
}

SessionActorQueuesrc/acp/control-plane/session-actor-queue.ts)使用,额外维护 pendingBySession 计数。