我想知道是否有一种方法可以在ActiveJob中将多个作业入队?类似于sidekiq push_bulk。
Sidekiq::Client.push_bulk(sidekiq_items)
我需要排队成千上万的工作,它需要太多的时间来做一个接一个。
6qftjkof1#
您不能这样做。ActiveJob没有针对每个Sidekiq特性的抽象。
rt4zxlrg2#
到Rails 7为止,ActiveJob中还没有内置的方法来实现这一点,但您自己开发它是非常容易的(这是对Sidekiq质量和持久性的证明,8年后这个问题仍然是相关的!)
class ApplicationJob < ActiveJob::Base def self.perform_later_bulk(array_of_args) sidekiq_args = array_of_args.map { |args| [new(*args).serialize] } Sidekiq::Client.push_bulk( 'class' => ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper, 'wrapped' => self, 'queue' => sidekiq_args[0][0]['queue_name'], 'args' => sidekiq_args ) end end def SomeJob < ApplicationJob def perform(arg1, arg2) # etc end end # Usage: SomeJob.perform_later_bulk([[arg1, arg2], [arg1, arg2], ...])
在Rails 7上测试过,但它应该至少可以追溯到5. 2。
2条答案
按热度按时间6qftjkof1#
您不能这样做。ActiveJob没有针对每个Sidekiq特性的抽象。
rt4zxlrg2#
到Rails 7为止,ActiveJob中还没有内置的方法来实现这一点,但您自己开发它是非常容易的(这是对Sidekiq质量和持久性的证明,8年后这个问题仍然是相关的!)
在Rails 7上测试过,但它应该至少可以追溯到5. 2。