2012-11-09 39 views
10

Tôi hiện đang sử dụng công việc bị trễ để xử lý công việc không đồng bộ. Thay vì tạo công nhân, tôi sử dụng phương pháp .delay rất nhiều.Chạy công việc bị trì hoãn và Sidekiq cùng lúc

Tôi muốn chuyển sang Sidekiq, nhưng tôi có quá nhiều loại công việc và không thể đảm bảo tất cả chúng đều là an toàn. Vì vậy, tôi muốn chạy Delayed Job và Sidekiq song song, và di chuyển một loại công việc tại một thời điểm.

Vì cả hai công việc bị trì hoãn và Sidekiq đều cung cấp phương thức .delay, làm thế nào tôi có thể phân biệt được hai phương pháp này? Có bất kỳ vấn đề tiềm năng nào khác không?

Trả lời

22

Đối Sidekiq 2.17.1 và sau đó, ở đâu đó trong initializers Rails, gọi như sau:

Sidekiq.hook_rails! 
Sidekiq.remove_delay! 

và bạn sẽ chỉ có tiền tố sidekiq_delay phương pháp và vân vân.

(official document)


Đối với phiên bản cũ của Sidekiq:

Đặt sau trong config/initializers/sidekiq.rb

module Sidekiq::Extensions::Klass 
    alias :sidekiq_delay :delay 
    remove_method :delay 
    alias :sidekiq_delay_for :delay_for 
    remove_method :delay_for 
    alias :sidekiq_delay_until :delay_until 
    remove_method :delay_until 
end 

module Sidekiq::Extensions::ActiveRecord 
    alias :sidekiq_delay :delay 
    remove_method :delay 
    alias :sidekiq_delay_for :delay_for 
    remove_method :delay_for 
    alias :sidekiq_delay_until :delay_until 
    remove_method :delay_until 
end 

module Sidekiq::Extensions::ActionMailer 
    alias :sidekiq_delay :delay 
    remove_method :delay 
    alias :sidekiq_delay_for :delay_for 
    remove_method :delay_for 
    alias :sidekiq_delay_until :delay_until 
    remove_method :delay_until 
end 

Và sau đó bạn có thể sử dụng sidekiq_delay phải xếp hàng trong Sidekiq, và gọi delay để xếp hàng trong công việc bị trì hoãn.

+0

Cảm ơn bạn, nó thực sự hữu ích :) –

0

Có vẻ như Sidekiq có mix-in thêm .delay phương thức cho tất cả các lớp. Không chắc chắn 100% điều này sẽ hoạt động như thế nào nhưng nó có thể dẫn đến các sự cố nếu delay mà bạn đang tham chiếu là ở cấp độ cá thể.

Lời khuyên của tôi là thêm sidekiq thư viện cho mỗi công việc cho đến khi bạn đã chuyển tất cả công việc của bạn sang công việc đó. Có nghĩa là để tránh bao gồm cả hai thư viện cùng một lúc, một lần nữa nếu có thể.

4

Đối với bất kỳ ai tìm kiếm điều này. Tôi đã tìm thấy Sidekiq bây giờ có một thiết lập cho điều này ra khỏi hộp. Tất cả bạn cần phải làm là thêm Sidekiq.remove_delay! để config/initializers/sidekiq.rb

này được mô tả ở đây: https://github.com/mperham/sidekiq/wiki/Delayed-Extensions

Các vấn đề liên quan