2015-07-03 13 views
5

Tôi có một thiết lập của hai nhân viên Sidekiq trong ứng dụng Rails 4.2 của tôi, nơi người đầu tiên thực hiện một số công việc và người kia gửi email khi tất cả các công việc đó đã được hoàn thành. Hai đang cùng trong superworker này:Chức năng gọi khi superjob sidekiq-superworker hoàn thành

Superworker.define(:PrioritySuperworker, :object_class, :object_id, :priority_ids) do 
    batch priority_ids: :priority_id do 
    PriorityMailsWorker :object_class, :object_id, :priority_id 
    end 
    SendConfirmationWorker :object_class, :object_id 
end 

Tôi muốn thực hiện thao tác khác trong mô hình nơi superworker này được gọi, nhưng chỉ khi superjob đã hoàn thành (có nghĩa là tất cả các subjobs trong nó cũng đã được hoàn thành). Tôi đã thấy rằng Sidekiq Pro có thể kích hoạt một cuộc gọi lại khi hoàn thành một loạt nhưng tôi không thể sử dụng nó kể từ khi tôi làm việc trên một nền tảng nguồn mở. Có cách nào có thể thực hiện bằng cách sử dụng Superworker hoặc bất kỳ công cụ miễn phí nào khác không?

Trả lời

2

Tôi không biết nếu đó là một lựa chọn, nhưng nếu tôi không nhầm, nó trông khá nhiều như những gì bạn cần.

Theo sidekiq-sperworker gem docs, bạn chỉ có thể thiết lập công nhân thứ ba và thêm công việc đó vào superworker, do đó đảm bảo nó chỉ chạy khi tất cả các bước trước được hoàn thành.

Với ví dụ của bạn nó sẽ trông như sau:

Superworker.define(:PrioritySuperworker, :object_class, :object_id, :priority_ids) do 
    batch priority_ids: :priority_id do 
    PriorityMailsWorker   :object_class, :object_id, :priority_id 
    end 
    SendConfirmationWorker   :object_class, :object_id 
    PerformAnotherOperationInModel :object_class, :object_id 
end 
+0

Vâng, điều này về cơ bản giải quyết vấn đề này. Tôi muốn mã ứng dụng, không phải một 'Worker' khác được gọi, nhưng OK, tôi sẽ tạo ra một' Worker' chuyên dụng cho điều đó. – mudasobwa

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