Solid Queue 使用教程

Solid Queue 使用教程

solid_queue Database-backed Active Job backend solid_queue 项目地址: https://gitcode.com/gh_mirrors/so/solid_queue

1. 项目介绍

Solid Queue 是一个基于数据库的 Active Job 后端,专为简单性和性能而设计。它支持常规的作业入队和处理,并提供了延迟作业、并发控制、暂停队列、每个作业的数字优先级、按队列顺序的优先级以及批量入队(Active Job 的 perform_all_later)等功能。Solid Queue 可以与 MySQL、PostgreSQL 或 SQLite 等 SQL 数据库一起使用,并利用 FOR UPDATE SKIP LOCKED 子句(如果可用)来避免在轮询作业时阻塞和等待锁。

2. 项目快速启动

安装

Solid Queue 默认配置在新的 Rails 8 应用程序中。如果你使用的是较早的版本,可以手动添加它:

bundle add solid_queue
bin/rails solid_queue:install

这将配置 Solid Queue 作为生产环境的 Active Job 后端,并创建 config/solid_queue.ymldb/queue_schema.rb

数据库配置

config/database.yml 中添加队列数据库的配置。例如,如果你使用 SQLite:

production:
  primary:
    <<: *default
    database: storage/production.sqlite3
  queue:
    <<: *default
    database: storage/production_queue.sqlite3

或者,如果你使用 MySQL/PostgreSQL/Trilogy:

production:
  primary: &primary_production
    <<: *default
    database: app_production
    username: app
    password: <%= ENV["APP_DATABASE_PASSWORD"] %>
  queue:
    <<: *primary_production
    database: app_production_queue

运行作业

在生产环境中运行以下命令以确保数据库已创建并加载了模式:

bin/rails db:prepare

然后,启动作业处理:

bin/jobs

3. 应用案例和最佳实践

并发控制

Solid Queue 提供了并发控制功能,允许你限制特定类型或具有特定参数的作业同时运行的数量。例如:

class MyJob < ApplicationJob
  limits_concurrency to: max_concurrent_executions, key: ->(arg1, arg2, **) { [arg1, arg2] }, duration: max_interval_to_guarantee_concurrency_limit
end

优先级和队列顺序

Solid Queue 支持按优先级和队列顺序执行作业。优先级值越小,优先级越高。队列顺序优先于优先级。例如:

class MyJob < ApplicationJob
  queue_as :high_priority
end

4. 典型生态项目

Puma 插件

Solid Queue 提供了一个 Puma 插件,允许你与 Puma 一起运行 Solid Queue 的监督程序,并由 Puma 监控和管理。只需在 puma.rb 配置中添加:

plugin :solid_queue

定期任务

Solid Queue 支持定义定期任务,这些任务在未来的特定时间或定期运行,类似于 cron 作业。例如:

dispatchers:
  - polling_interval: 1
    batch_size: 500
    recurring_tasks:
      my_periodic_job:
        class: MyJob
        args: [42, { status: "custom_status" }]
        schedule: "*/5 * * * *"

这个配置将每 5 分钟运行一次 MyJob

通过以上步骤,你可以快速上手并使用 Solid Queue 来管理你的 Active Job 队列。

solid_queue Database-backed Active Job backend solid_queue 项目地址: https://gitcode.com/gh_mirrors/so/solid_queue

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伍盛普Silas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值