Я хочу автоматически поставить работу в очередь после ее завершения. Будет необязательная задержка на 10 секунд, если ничего не было обработано.
Я вижу два подхода. Первый - поместить логику в блок perform
. Второе - использовать функцию around_block
для этого.
Какой более элегантный способ сделать это?
Вот пример блока кода с такой логикой
# Process queue automatically
class ProcessingJob < ApplicationJob
queue_as :processing_queue
around_perform do |_job, block|
if block.call.zero?
# wait for 10 seconds if 0 items was handled
self.class.set(wait: 10.seconds).perform_later
else
# don't rest, there are many work to do
self.class.perform_later
end
end
def perform
# will return number of processed items
ProcessingService.handle_next_batch
end
end
Должен ли я поместить around_block
логику вperform
функция?