Повторите попытку sqs с ошибкой с помощью shoryuken вручную - PullRequest
0 голосов
/ 08 июня 2018

В настоящее время я создаю панель администратора для мониторинга наших очередей SQS, вдохновленную этим средним постом .

Мне удалось, чтобы все работало нормально с этим кодом в моем специальном шорюкенском промежуточном программном обеспечении:

class DashboardMiddleware
  def call(worker_instance, queue, sqs_msg, body)
    redis = Redis.new(url: ENV['REDIS_DASHBOARD_URL'])
    check_if_already_failed(redis, sqs_msg.attributes['SentTimestamp'].to_i)
    redis.incr("sqs-dashboard-enqueued")
    yield
    redis.incr("sqs-dashboard-consumed")
  rescue Exception => e
    data =     {
      id: sqs_msg.attributes['SentTimestamp'].to_i,
      worker: worker_instance.class.to_s,
      queue: queue,
      error: e,
      attributes: sqs_msg.attributes,
      receipt_handle: sqs_msg.receipt_handle,
      body: body,
      enqueued_at: Time.at(sqs_msg.attributes['SentTimestamp'].to_i / 1000)
    }.to_json
    redis.lpush("sqs-dashboard-failures", data)
    raise e
  end

  def check_if_already_failed(redis, job_id)
    jobs = redis.lrange("sqs-dashboard-failures", 0, -1).map { |job| JSON.parse(job) }
    i = 0
    g = nil
    jobs.each do |j|
      g = i if j["id"] == job_id
      i += 1
    end
    unless g.nil?
      redis.lset("sqs-dashboard-failures", g, "DELETED")
      redis.lrem("sqs-dashboard-failures", 1, "DELETED")
    end
  end
end

Итак, я отображаю все мои неудачные задания на панели администратора и подробную информацию об ошибке.Это был первый шаг.Теперь я хотел бы иметь возможность повторить эти задания вручную (по одному для начала).Я долго искал в интернете, и не нашел ничего для этого (с помощью shoryuken или напрямую с sqs sdk).

Кто-нибудь знает, как вручную повторить неудачное сообщение?Мы уже рассмотрели очереди недоставленных писем, но предпочли бы их не использовать.

Большое спасибо за любые советы или отправную точку:)

...