用途:面向使用 Elixir Oban 处理后台任务的开发者,提供避免常见 bug 的范式与模式。
主要能力与要点:
- 序列化规则:普通任务参数是 JSON,创建时可用原子键,perform/1 中必须用字符串键;Oban Pro 的 cascade context 保留原子,可用点号访问。
- 错误处理:不要吞掉错误,让异常冒泡或返回 {:error, reason},以便自动记录、指数退避重试、在 Oban Web 中可见。仅在需要自定义重试时捕获,可用 {:cancel, reason} 永久失败、{:snooze, seconds} 轮询或延迟重试。
- 任务链:简单顺序链由每个任务入队下一个任务,不必用 Pro Workflows。
- 唯一任务:unique: [period: 60] 或 keys: [:user_id];唯一性在插入时检查,非执行时。
- 高吞吐:百万级记录应 Enum.chunk_every(100) 分批,而非每条一个任务;批量插入不加唯一约束。
- Oban Pro:Workflow 适合复杂依赖图、扇出/扇入、跨步骤记录值、条件分支;简单 A→B→C 不用。add_graft 会等待子工作流完成并可访问输出,add_workflow 不会。被依赖的最终任务需 recorded: true。可用 Workflow.append/2 动态追加,但不能覆盖已运行任务的 context 或依赖。Batch 回调实现扇入完成通知,分页任务也应加入批次。测试用 run_workflow/1,不要用 inline 模式。
限制:资料未提供安装命令、版本要求、收费与平台信息。