QueueClassic 使用教程
1、项目介绍
QueueClassic 是一个基于 PostgreSQL 的消息队列库,专为 Ruby 应用(如 Rails、Sinatra 等)设计。它提供了异步作业轮询、数据库维护的锁以及最小的依赖。QueueClassic 仅需要 pg
和 json
两个 Gem。它的主要优势在于利用 PostgreSQL 的特性,如 listen/notify
、skip locked
和行锁,同时确保在事务提交后才处理队列中的任务。
2、项目快速启动
安装
首先,添加以下内容到你的 Gemfile:
gem 'queue_classic', '~> 4.0.0'
然后运行:
bundle install
数据库设置
创建所需的表和函数:
bundle exec rake qc:create
配置数据库连接
默认情况下,QueueClassic 会使用 QC_DATABASE_URL
,如果未设置则会 fallback 到 DATABASE_URL
。URL 格式如下:
postgres://username:password@localhost/database_name
如果使用 Heroku 的 PostgreSQL 服务,这个 URL 已经设置好了。如果不想设置环境变量,可以在初始化文件中设置连接:
QC::Conn.connection_string = "postgres://username:password@localhost/database_name"
示例代码
以下是一个简单的示例,展示如何将任务加入队列并处理:
# 初始化队列
queue = QC::Queue.new
# 将任务加入队列
queue.enqueue("MyWorker.perform", "arg1", "arg2")
# 处理任务
class MyWorker
def self.perform(arg1, arg2)
puts "Processing #{arg1} and #{arg2}"
end
end
3、应用案例和最佳实践
应用案例
QueueClassic 适用于需要在数据库事务提交后才处理的任务,例如邮件发送、数据同步等。它特别适合已经在使用 PostgreSQL 的项目,避免引入额外的依赖(如 Redis、Beanstalkd 等)。
最佳实践
- 事务内入队:确保在数据库事务内将任务加入队列,以保证任务只在事务提交后才被处理。
- 监控和日志:定期检查队列状态,并记录关键操作的日志,以便于问题排查和性能优化。
- 错误处理:实现错误重试机制,对于特定异常进行重试,并记录失败的任务以便后续分析。
4、典型生态项目
Queue Classic Plus
Queue Classic Plus 扩展了 QueueClassic,增加了对特定异常的重试、事务处理、指标收集等功能。
Queue Classic Admin
Queue Classic Admin 提供了一个管理界面,方便查看和管理队列中的任务。
Queue Classic Matchers
Queue Classic Matchers 提供了 RSpec 匹配器,用于测试 QueueClassic 相关的代码。
通过这些生态项目,可以进一步增强 QueueClassic 的功能和易用性,满足更多复杂场景的需求。