Как перенести задание sidekiq без повторных попыток в промежуточном программном обеспечении? - PullRequest
0 голосов
/ 08 января 2019

Есть ли способ, как перенести задание обратно в очередь из серверного программного обеспечения sidekiq? Или просто повторить попытку, не считая это?

UDPATE: Моя справочная информация: мне нужно отслеживать статус заданий вasticsearch (одно задание следует за другим), но если эластичный недоступен, и я перенесу того же работника снова, я потеряю цепочку (изменения jid ).

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Это не рабочий код, но что-то вроде этого может помочь вам достичь желаемого.

Вы можете определить промежуточное ПО и добавить его в sidekiq, как показано ниже

Sidekiq.configure_server do |config|
  config.server_middleware do |chain|
    chain.add Sidekiq::RetryMonitoringMiddleware
  end
end

Теперь вы можете определить в промежуточном программном обеспечении, как указано ниже:

class Sidekiq::RetryMonitoringMiddleware
  def call(worker, job_params, _queue)
    #calling the worker perform method to add it to the queue
    worker.perform(job_params['jid'], *job_params['args']) if should_retry?(job_params)
  rescue StandardError => e
    Rails.logger.error e
  ensure
    yield
  end

  private

  def should_retry?(job)
    # If worker is having a failure flag then only it should return a response
    # Need to check in which key we get a failure message
    (Integer(job['failure'])) == (1 || "true")
  end
end

Надеюсь, это поможет !!

0 голосов
/ 08 января 2019

Самым простым способом было бы перепланировать задание, а затем выйти. Например:

class MyJob < ApplicationJob
  queue_as :default

  def perform(*args)
    if ready_to_perform?
      # Do stuff!
    else
      MyJob.perform_later(args)
    end
  end
end

Используйте с осторожностью. Вы, вероятно, не хотите, чтобы работа застряла, перепланируя себя навсегда!

Это не совсем то же самое, что «повторение без увеличения счетчика повторов» (что немного сложнее в реализации), но достаточно для большинства случаев использования, подобных этому.

...