Вручную повторить неудачную работу sqs с shoryuken
В настоящее время я создаю панель администратора для мониторинга наших очередей SQS, вдохновленную этим средним постом.
Мне удалось все нормально работать с этим кодом в моем специальном ПО shoryuken:
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).
У кого-нибудь есть подсказка, чтобы вручную повторить неудачное сообщение? Мы уже рассмотрели очереди недоставленных писем, но предпочли бы их не использовать.
Большое спасибо за любые советы или отправную точку:)