@ agentium/队列
BullMQ 的背景代理、团队和工作流程执行 5.81.5+ 在v5或 6.3.11+在v6之内 需要22.18+或24.11+的节点。 新的队列可以使用 v6;在部署 v6 工人或作家之前,先用 v5 来迁移已持续存在的遗留重复记录.
npm install @agentium/queue bullmq@^6.3.11 ioredis
import { AgentQueue, AgentWorker } from "@agentium/queue";
const connection = "redis://127.0.0.1:6379/0";
const queue = new AgentQueue({ connection, defaultJobOptions: {
attempts: 3, backoff: { type: "exponential", delay: 1000 },
} });
const worker = new AgentWorker({ connection, agentRegistry: { assistant: agent } });
await queue.enqueueAgentRun({ agentName: "assistant", input: "Summarize the report" });
await queue.schedule({ id: "daily-summary", cron: "0 9 * * *", timezone: "UTC",
agent: { name: "assistant", input: "Summarize new reports" },
});
// The same ID updates its schedule; it does not create another scheduler.
await queue.unschedule("daily-summary");
await worker.stop();
await queue.close();
默认队列名称现在是 agentium-jobs;旧的 agentium:jobs 被当前 BullMQ 拒绝,因为队列名称不能包含冒号。 设置相同的显式, 有效 queueName 生产者和工人继续现有部署。 通过节点的无害环境管理兼容性加载BullMQ的构造器 createRequire。Redis URL 保存证书、数据库和 rediss: TLS 设置 .
schedule 完全接受一个 agent, (中文(简体) ), team 或者说 workflow 目标,并使用稳定的呼叫器提供的工作调度器ID。 工作流有效载荷 initialState, (中文(简体) ), sessionId, (中文(简体) ), userId 财务报告和审定财务报表 tenantId 输入 Workflow.run特工和小队还有前方身份 队列访问是一个可信赖的主机边界:在排队前认证出厂商并授权这些诉求;一个Redis有效载荷不是身份证明.
重试配置属于制片人 defaultJobOptions 或个人排序选项。 前一个 WorkerConfig.attempts/backoffDelay 字段从未控制 BullMQ 工作;它们已经从 TypeScript API 中删除。 JavaScript呼叫器在BullMQ或连接被初始化之前仍然收到迁移诊断. 重试有效剂工作需要应用一能. cancelJob 删除等待/延迟的工作,不能取消活动锁定的工作. stop 耗尽了积极的工作,并报告了其暂停时间;它没有声称远程效应被卷回了.
重复时间表迁移
BullMQ v6去除遗留的重复API. listLegacySchedules() 财务报告和审定财务报表 removeLegacySchedule() 需要安装 BullMQ v5 , 并在 v6 上明显失败, 包括在干净的队列上。 在v6时, schedule,反复排队和 listSchedules 拒绝包含遗留元数据的队列;他们不会移动或默默地隐藏它。 见 官方 v5 至 v6 迁移指南。 。 。 .
与 BullMQ 5.81.5 (或相容的 v5 发布) 进行以下维护. 遗产记录留在Redis,直到操作员将其取出. 不要同时运行旧的和新的调度写入器 .
- 停止列表作者, 呼叫
queue.pause(),让积极的工作完成,然后阻止工人.removeLegacySchedule需要暂停队列和零活动任务. - 保存
await queue.listLegacySchedules()和原始应用有效载荷/选择。 清单包括钥匙、名称、克龙、时区和下个时间戳;它不是完整的有效载荷备份。 更改前备份 Redis . - 选择稳定的新ID并调试想要的调度集 。 删除每个遗留密钥
removeLegacySchedule(key)打电话前schedule。新的创建拒绝匹配的后继名称/冠来防止意外重叠. - 校验
listLegacySchedules()整个队列均为空并listSchedules()里面有预定的身份证 关闭v5维护客户端. 部署6名工人和作家,核实listSchedules()再来一次await queue.resume()并启用排程写入器. - 要回滚,停用v6工人/写作员,在停用并排出水时再回v5. 删除使用替换的ID
unschedule,用已保存的原始 BullMQ 重复选项和有效载荷(或恢复 Redis 备份)来恢复旧记录,验证库存,并重新启动旧部署. 替换活动时永远不要恢复遗留记录 .
方便之处 enqueue*({repeat}) API现在使用散列的目标,有效载荷和重复选项来提升排程. 改变散列的有效载荷; 使用 schedule({id}) 当您需要稳定更新时. listSchedules 不包括v5上的遗留记录,并拒绝在v6上的遗留记录. BullMQ 在重复索引中存储两种格式:适配器通过返回的方式识别新的调度器 iterationCount 并且还处理旧后遗留键的v6 SDK诊断. 移民检查并不是一个与同时存在的遗产作者对立的锁;仍然需要加以制止.
核查
在构建核心后从寄存器根运行此命令 :
AGENTIUM_REDIS_TEST=1 AGENTIUM_REDIS_PORT=6389 npx vitest run packages/queue/src/__tests__
使用一次性的 Redis 数据库 。 Fixtures 创建出独特的队列,并只去除这些队列. 中情局对一个孤立的Redis 7服务进行监视 他们行使真实的公牛MQ 5.81.5和6.3.11 SDKs:调度员升迁/搬运,v5坚持被v6所拒绝的遗留数据,被明确暂停的v5迁移,v6使用迁移的调度员记录,更古老的遗留钥匙拒绝,工人身份/进度隔离和持久交付. 固定装置使用 bullmq-v5 v5 维护过程的开发别名; 它不模仿 SDK 方法. Redis Cluster和可替代的BullMQ后端在此固定器外.
持久交付
DurableAgentQueue 财务报告和审定财务报表 DurableAgentWorker 使用单独的 agentium-durable 队列。 任务商店拥有执行状态;Redis发送一个版本提示,其中只包含租户/任务ID和一个不可改变的定义摘要. 现有代理人/团队/工人保持他们目前的行为.
import { DurableAgentQueue, DurableAgentWorker } from '@agentium/queue';
// supervisor uses the same initialized durable store on all workers.
const durable = new DurableAgentQueue({ connection, supervisor, admit: admitTask });
const durableWorker = new DurableAgentWorker({
connection, supervisor, admit: recheckCurrentGrants,
drivers: [{ id: 'save-document', version: 1, recoverable: true, execute: saveDocument }],
});
await durable.enqueue({
id: taskId, identity: verifiedIdentity, manifestHash, inputRef,
policyRevision: 1, grantRefs: approvedGrants,
driver: { id: 'save-document', version: 1 }, input: { documentRef },
});
这两种回调都是强制性的被信任-宿主接收边界. 生产者录取发生在持久性之前;工人录取发生在原子主张前后. 版本驱动程序必须明确支持用稳定的动作ID来重放并调节. 注册普通代理/团队/工作流程功能不能确定该财产.
恒定先于雷地斯入等. 如果 enqueue 失败, 任务仍然可以恢复: 重试相同的不可更改的定义或调用 wake({tenantId, taskId})在批准或和解之后醒一醒。 重复交货由商店用栅栏围住;早期再试仍然被拖延,直到现有租约可以收回。 已完成的任务交付只将任务/状态/修改后的元数据返回Redis. 未知的外部结果会阻碍处理器执行直至对齐 .
cancel 继续取消并唤醒工人;它不要求立即远程解雇。 主机必须重试 wake 当 Redis 不可用时. stop 排出积极的工作。 维持一个主机恢复扫描, 以检查持续的工作, 而无需发送提示; 此软件包不会扫描任意存储或启动隐藏的背景服务 。 见 长期储存和回收合同。 。 。 .