这是我的第一个处理作业异步地在我的应用程序中实现了Sidekiq进行后台处理.我将使用它提醒电子邮件和应用内通知.我很困惑我是否应该使用活动作业创建一个发送电子邮件的工作或者Sidekiq工作人员发送电子邮件.他们似乎做同样的事情,Rails 4.2 Active Job似乎很新,是替代Sidekiq工作者的需要吗?
以下是使用活动作业作业和Sidekiq Worker发送邮件代码的相同方式.我正在使用每当宝石进行调度.
my_mailers.rb
class MyMailers < ActionMailer::Base def some_mailer(r.user_id) @user = User.find(r.user_id) mailer_name = "ROUNDUP" @email = @user.email @subject ="subject text" mail(to: @email,subject: @subject,template_path: ‘/notifer_mailers',template_name: 'hourly_roundup.html',) end
使用Sidekiq“工人”
some_worker.rb
class SomeWorker include Sidekiq::Worker def perform() @user = User.all @reminders = @user.reminders.select(:user_id).uniq.newmade @reminders.each do |r| MyMailers.some_mailer(r.user_id).deliver_later end end end
使用活动作业“作业”
some_job.rb
class SomeJob < ActiveJob::Base queue_as :mailer def perform() @user = User.all @reminders = @user.reminders.select(:user_id).uniq.newmade @reminders.each do |r| MyMailers.some_mailer(r.user_id).deliver_later end end end
两个例子在我的每次调度程序
schedule.rb
require File.expand_path(File.dirname(__FILE__) + "/../config/environment") set :path,Rails.root set :output,Rails.root.join('log','cron.log') #using a worker every 1.day,:at => '4:30 am' do runner SomeWorker.perform_async end #using a job every 1.day,:at => '4:30 am' do runner SomeJob.perform_async end
解决方法
简短的回答是他们是一回事. ActiveJob将其称为作业,而Sidekiq将其称为“工人”.我决定保留术语不同,以便人们能区分两者.
你可以使用任何一个.请注意,ActiveJob不提供对完整的Sidekiq选项的访问,因此如果您要自定义您的工作选项,您可能需要使其成为“工人”.