用途:为 iii 提供持久化主题投递。消费者通过 durable:subscriber 触发器注册,发布使用 iii::durable::publish,worker 会持久化消息、重试失败投递、把耗尽重试的任务移入 DLQ,并提供重投/丢弃的检查函数。
安装:iii trigger compose::add worker=queue。启动前必须从引擎配置中移除旧的内置 queue 服务,否则两者会争用同一个 durable:subscriber 触发器类型。
主要能力:发布 JSON 负载到队列/主题(输入接受 queue 或 topic 别名);iii::queue::redrive 把某队列全部 DLQ 消息移回主队列;iii::queue::redrive_message 按 message_id 重投单条;iii::queue::discard_message 按 message_id 清除单条;engine::queue::list_topics、engine::queue::topic_stats、engine::queue::dlq_topics、engine::queue::dlq_messages 用于列出主题、查看深度/消费者数/DLQ 深度及浏览死信。
触发器配置:queue(必填,topic 为兼容别名)、max_retries(默认 3)、backoff_ms(默认 1000,退避为 backoff_ms * 2^(attempts - 1))、condition_function_id(可选,仅显式返回 false 时跳过处理)。
适配器:builtin 默认内存模式;file_based 可跨重启保留(file_path、save_interval_ms);redis 仅 pub/sub,无 DLQ;rabbitmq 支持重试/DLQ/优先级/fifo。切换适配器会热替换传输并重启所有消费者,新适配器先构建,坏配置会保留旧适配器继续服务。
适用场景:主题事件需被订阅函数可靠处理、失败需自动重试后再入 DLQ、需要检查/重投/丢弃死信,以及本地或单实例持久队列(开发用内存,重启存活用文件)。
限制:不是即发即弃广播,可接受丢事件时用 pubsub;bridge 适配器未移植;引擎 TriggerAction.Enqueue 与命名函数队列需单独的 QueueEnqueuer 引擎切面,在此之前使用本 worker 的发布与订阅;内存模式在重启或传输热替换时丢失待处理任务,启动时 redis/rabbitmq 不可达会导致启动失败且不回退 builtin;fifo 严格串行,无按 group_id 的分组 fifo;本 worker 只承载工作项,键值或流状态请用 state 或 stream。