Solid Queue 使用教程
solid_queue Database-backed Active Job backend 项目地址: 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.yml
和 db/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 项目地址: https://gitcode.com/gh_mirrors/so/solid_queue
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考