Capacities笔记管理
管理Capaciti
Oban Designer 用于在 Elixir 项目中设计和实现 Oban 后台任务工作流。覆盖队列配置、重试策略、唯一性约束、Cron 定时调度及错误处理等核心能力。
Oban任务设计器帮助开发团队在Elixir项目中快速搭建可靠的后台任务体系。通过可视化配置队列优先级、重试策略和定时调度,降低异步任务开发门槛,确保关键业务如订单处理、数据同步等场景的稳定运行,减少因任务失败导致的人工干预。
落地案例:某电商平台需在用户下单后异步发送确认邮件并同步库存。团队使用Oban任务设计器:输入Ecto数据库配置和邮件发送逻辑描述,工具自动生成Worker模块代码及config.exs队列配置,设置邮件队列为高优先级、库存同步为普通优先级,并配置指数退避重试。最终输出包含Ecto迁移文件和任务插入示例,开发人员直接集成即可上线。
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、外部消息队列中间件 |
原始链接:https://github.com/openclaw/skills/tree/main/skills/gchapim/oban-designer/SKILL.md
来源类型:GitHub 仓库