SuperAPI AI 工具集

iii-queue

通用与其它

查看项目

更新于 10-15 22:17

技能介绍

用途:iii-queue 提供异步任务处理,支持重试、可配置并发、FIFO 顺序与死信队列(DLQ),并提供持久化主题发布/订阅。适合需要可靠投递、失败重试与恢复的后台工作。

主要能力:两种模式。主题队列为持久化 pub/sub,用 durable:subscriber 触发器注册消费者,用 iii::durable::publish 生产消息,同一主题的每个不同函数各收到一份消息(扇出)。命名队列在配置 queue_configs 中定义,通过 TriggerAction.Enqueue 入队函数调用,无需注册触发器,目标函数即消费者。

适配器:builtin(进程内,in_memory 或 file_based,单实例,支持重试、DLQ、FIFO)、rabbitmq(跨实例持久投递、重试与 DLQ)、redis(仅多实例主题 pub/sub;可向命名队列发布,但不实现命名队列消费、重试或 DLQ)。本地与单实例选 builtin,多实例生产选 rabbitmq。

函数:iii::durable::publish 发布主题消息;iii::queue::redrive 将某命名队列 DLQ 全部消息移回主队列;iii::queue::redrive_message 按 id 移回单条;iii::queue::discard_message 按 id 清除单条;engine::queue::list_topics、topic_stats、dlq_topics、dlq_messages 用于枚举主题、查看统计、列出 DLQ 主题与浏览 DLQ 消息。

用法:注册处理函数 iii.registerFunction('orders::process', handler),再注册触发器 iii.registerTrigger({ type: 'durable:subscriber', function_id: 'orders::process', config: { topic: 'orders.created' } })。单目标函数带重试(非扇出)时,跳过触发器,直接用 TriggerAction.Enqueue({ queue }) 入队到 queue_configs 中定义的队列。队列调优参数:max_retries(默认 3)、concurrency(默认 10,FIFO 强制为 1)、type(standard | fifo)、message_group_field(fifo 必填)、backoff_ms(默认 1000,指数退避)、poll_interval_ms(默认 100)。消息载荷结构可对触发器类型或处理函数 id 调用 iii get function info 查看。

适用场景:需要异步执行并自动重试、重复失败后进入死信;需要按键严格 FIFO(支付、账本、状态机),用带 message_group_field 的 fifo 队列;需要持久扇出,每个订阅消费者都处理每个事件;需要检查或恢复卡住的任务,浏览 DLQ 并重投或丢弃。

限制:不是即发即弃广播,临时通知且可丢事件请用 iii-pubsub;redis 适配器对命名队列仅发布,消费、重试与 DLQ 需 builtin 或 rabbitmq;FIFO 队列强制 prefetch=1(一次一个任务),要求每个载荷的 message_group_field 存在且非空,以吞吐换顺序,并内联重试(阻塞该组直到成功或进入 DLQ);本 worker 只承载工作项,不存键值或流状态,后者用 iii-state / iii-stream。官方未提供收费、价格与平台信息。