Oban任务设计器

19分钟前更新 1 00
Oban任务设计器Oban任务设计器
Oban任务设计器

技能简介

Oban Designer 用于在 Elixir 项目中设计和实现 Oban 后台任务工作流。覆盖队列配置、重试策略、唯一性约束、Cron 定时调度及错误处理等核心能力。

业务背景

Oban任务设计器帮助开发团队在Elixir项目中快速搭建可靠的后台任务体系。通过可视化配置队列优先级、重试策略和定时调度,降低异步任务开发门槛,确保关键业务如订单处理、数据同步等场景的稳定运行,减少因任务失败导致的人工干预。

落地案例:某电商平台需在用户下单后异步发送确认邮件并同步库存。团队使用Oban任务设计器:输入Ecto数据库配置和邮件发送逻辑描述,工具自动生成Worker模块代码及config.exs队列配置,设置邮件队列为高优先级、库存同步为普通优先级,并配置指数退避重试。最终输出包含Ecto迁移文件和任务插入示例,开发人员直接集成即可上线。

能做什么

  • 生成 Oban Worker 模块与队列配置
  • 配置并发队列规模与优先级
  • 设定指数退避或自定义重试间隔
  • 防止重复任务的唯一性约束
  • 基于 Cron 表达式的定时任务编排
  • 提供测试环境与调试支持

使用说明

1. 添加依赖

# mix.exs
{:oban, "~> 2.18"}

2. 配置 Oban

# config/config.exs
config :my_app, Oban,
  repo: MyApp.Repo,
  queues: [default: 10, mailers: 20, webhooks: 50, events: 5],
  plugins: [
    Oban.Plugins.Pruner,
    {Oban.Plugins.Cron, crontab: [
      {"0 2 * * *", MyApp.Workers.DailyCleanup},
      {"*/5 * * * *", MyApp.Workers.MetricsCollector}
    ]}
  ]

# application.ex children:
{Oban, Application.fetch_env!(:my_app, Oban)}

3. 创建数据库迁移

mix ecto.gen.migration add_oban_jobs_table
defmodule MyApp.Repo.Migrations.AddObanJobsTable do
  use Ecto.Migration
  def up, do: Oban.Migration.up(version: 12)
  def down, do: Oban.Migration.down(version: 1)
end

4. 运行迁移

mix ecto.migrate

5. 编写 Worker

defmodule MyApp.Workers.SendEmail do
  use Oban.Worker, queue: :mailers, max_attempts: 5

  @impl Oban.Worker
  def perform(%Oban.Job{args: %{"to" => to, "template" => template}}) do
    case MyApp.Mailer.deliver(to, template) do
      {:ok, _} -> :ok
      {:error, :temporary} -> {:error, "retry later"}
      {:error, :permanent} -> {:cancel, "invalid address"}
    end
  end
end

6. 插入任务

%{user_id: user.id}
|> MyApp.Workers.SendEmail.new(priority: 0)
|> Oban.insert()

输入与输出

见下方输入与输出表格。

项目内容
输入Elixir 项目结构、Ecto 数据库配置、任务业务逻辑、队列并发需求、Cron 规则、重试策略偏好
输出Oban Worker 模块代码、config.exs 队列配置、Ecto 迁移文件、任务插入示例、测试用例模板、唯一性约束配置
适用人群Elixir/Phoenix 后端开发者、需要异步处理的团队、定时任务场景、Webhook 投递系统、金融科技应用开发者
不包含Oban Pro 商业功能、非 Elixir 方案、Kubernetes Job、外部消息队列中间件

 

风险提示

  • Cron 任务需确保节点时钟同步,避免多节点重复执行
  • 唯一性约束依赖数据库,高并发场景注意锁竞争
  • 长任务需设置合理 timeout,防止占用连接池
  • 队列并发数过高可能压垮下游服务,建议配合熔断
  • 升级 Oban 版本前检查 Migration 版本兼容性

来源信息

原始链接:https://github.com/openclaw/skills/tree/main/skills/gchapim/oban-designer/SKILL.md
来源类型:GitHub 仓库

数据统计

相关导航

暂无评论

none
暂无评论...