介绍「Ruby on Rails」的 Sidekiq gem
1. 概括描述
・Sidekiq 是一个用于在 Rails 应用中执行后台任务的 gem。
・Sidekiq 使用多线程和 Redis 同时处理多个任务。
・Redis 被理解为用于存储任务队列的数据库存储。
2. 配置
Sidekiq:
在Gemfile中添加以下行:gem “sidekiq”
接下来,运行 bundle install。
Redis:Redis是一种开源的内存数据结构存储系统,常用于构建高性能的、高并发的应用程序。它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等,并具备强大的缓存功能,能够快速读写数据。Redis还提供了多种功能,例如发布订阅、事务处理、持久化等,使得它成为一个非常灵活和强大的存储解决方案。
请按照以下链接安装 Redis: https://redis.io/topics/quickstart
在config/initializers/sidekiq.rb文件中配置Sidekiq以连接Redis。
Sidekiq.configure_server do |config|
config.redis = {
url: "redis://127.0.0.1:6379/12"
}
end
Sidekiq.configure_client do |config|
config.redis = {
url: "redis://127.0.0.1:6379/12"
}
end
3. 活动的顺序
Sidekiq由Sidekiq客户端、Sidekiq服务器和Redis这三个主要部分组成。
Sidekiq 客户端:
责任在于将作业推送到Redis队列中。
使用JSON.dump函数将数据转换为哈希。
请注意:传递的参数必须是简单的 JSON 类型,如字符串、整数、布尔值、浮点数、空值(null)、哈希和数组。
Sidekiq服务器:
需要负责从Redis队列中获取作业以进行处理。
开始 Worker,并使用传递的参数调用 perform 函数。
Redis:这里是用来存储作业的地方。
4. 工作的生命周期
1. 日程安排:待执行的作业清单
2. 正在执行队列中的作业。
3. 忙碌:工作进行中
4. 未能成功的计数器:
工作执行但失败并未完成的次数。
默认情况下,工作可以失败的次数为25次,之后工作将被丢弃。
如果超过规定次数,工作将被移动到死信队列。
可以在创建工作时进行个性化设置,如下所示:sidekiq_options :retry => 5。
5. 已处理:作业已完成。
6.重试机会:
如果工作失败,且未超过允许的失败次数,该工作将始终包含在重新尝试队列中。
7. 行人死亡队:
超过容许次数的作业将被推送到死亡队列中。
5. 使用方法
当您配置了 Sidekiq 和 Redis,就准备好使用 Sidekiq 了。
执行以下命令:rails g sidekiq:worker Hard
随后,将会自动创建文件 app/workers/hard_worker.rb。或者,您也可以手动创建该文件。
class HardWorker
include Sidekiq::Worker
def perform(*args)
# do something
end
end
在其中,”perform” 是一个执行后台任务的函数。
*args 是传递的参数。输入参数必须是简单的 JSON 类型,如字符串、整数、布尔值、浮点数、空值(nil)、哈希、数组等,不能使用符号、命名参数、日期、时间等 Ruby 对象。
创建一个在后台运行的作业。
创建用于异步处理的作业。
HardWorker.perform_async('bob', 5)
默认情况下,Sidekiq 调度程序每隔 5 秒(如果是 Sidekiq < 5.1,则为 15 秒)检查一次计划任务,并且您可以在 config/initializers/sidekiq.rb 文件中重置该值。
Sidekiq.configure_server do |config|
config.average_scheduled_poll_interval = 15
end
进行测试:需要打开三个选项卡才能执行。
・选项一:标签1:运行 redis-server redis-server
在第二个标签页上执行sidekiq的命令:bundle exec sidekiq
・标签 3:运行 rails s 服务器。