Sidekiq Rails 4.2 Nutzen, Aktiv, Arbeit oder Arbeiter? Was ist der Unterschied
Dies ist meine erste Bearbeitung jobs asynchron ich die Umsetzung Sidekiq für die Hintergrundverarbeitung in meiner app. Ich werde es für Erinnerungs-E-Mails und in-app-Benachrichtigungen. Ich bin verwirrt, ob ich den Active Job, einen job zu erstellen, der sendet eine E-Mail oder ein Sidekiq-Worker eine E-Mail senden. Sie scheinen das gleiche zu tun, und Rails 4.2 Aktive Job scheint sehr neu...ist es ersetzt die Notwendigkeit für ein Sidekiq-Arbeiter?
Unten ist die gleiche senden eine mailer-code mit einem Aktiven Job zu job und ein Sidekiq-Arbeiter. Ich bin mit Wann auch immer Juwel für die Planung.
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
end
Mit einem Sidekiq "Arbeiter"
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
Mit einem Active Job "Job"
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
Beide Beispiele in meinem scheduler, Wenn
Zeitplan.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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort ist, Sie sind die gleiche Sache. ActiveJob nennt es ein Job in der Erwägung, dass Sidekiq es ruft ein Arbeiter. Ich habe beschlossen, halten die Terminologie unterschiedlich, so dass die Menschen zwischen den beiden.
Können Sie entweder eine. Beachten Sie, dass ActiveJob nicht bieten Zugriff auf den vollen Satz von Sidekiq-Optionen, so, wenn Sie möchten, passen Sie die Optionen für Ihre Arbeit, die Sie vielleicht brauchen, um es einem Arbeiter.
Rails 4.2 Hinzugefügt
ActiveJob
zu vereinen, das jobs API, aber es laufen asynchron benötigen Sie einen hintergrund-handler, dies ist, wo die sidekiq kommt.Sidekiq hat schon seine Arbeiter-Klasse, sondern es auch umgesetzt das neue active job-Klasse, also es kann so oder so funktionieren.
Aber die gute Sache über aktive Jobs ist, dass Sie können den hintergrund ändern handler, ohne die Notwendigkeit, ändern Sie Ihren code, den Sie beide unterstützen die Funktionen, die Sie wollen (z.B.: Umgang jobs zu einer bestimmten Zeit; mehrere priority queues).
Gibt es eine rails api guide hier enthält einen guten Vergleich für Handler, die Unterstützung von active job, einschließlich jeder handler unterstützten features. Hier ist die Vergleichstabelle, wenn du zu faul bist, um überprüfen Sie den link:
Ich würde empfehlen, kleben mit native sidekiq weitere features. Ich lief auch in einige seltsame Serialisierung Probleme mit ActiveJob einmal in eine Weile. ActiveJob, obwohl er sich dem edlen Ziel, die Durchsetzung der unified API, Grenzen viele Implementierungen genau aus diesem Grund und bietet einen kleinen Vorteil für jetzt IMO. Ich persönlich bin mehr als gespannt, zahlen die möglich Preis für den code umschreiben, für einige Zeit in eine Zukunft, die vielleicht nie passieren, Sie don ' T swap-kritische Teile der Anwendung, die einfach nur zum Spaß - wie activerecord vs mongodb), wenn ich entscheiden, zu tauschen Umsetzung für umfangreichere feature-set.
Gemäß der Dokumentation ausgeführt haben, kann es sein performance-Vorteil der Verwendung von Sidekiq::Arbeitnehmer über ActiveJob.
https://github.com/mperham/sidekiq/wiki/Active-Job#performance