Я работаю над приложением Rails, в котором возмещение клиенту передается работнику Sweatshop. Если возврат не удастся (потому что мы не можем связаться с обработчиком платежей в это время), я хочу вернуть работу.
class RefundWorker < Sweatshop::Worker
def process_refund(job)
if refund
Transaction.find(job[:transaction]).update_attributes(:status => 'completed')
else
sleep 3
RefundWorker.async_process_refund(job) # requeue the job
end
end
Есть ли лучший способ сделать это, чем выше? В RabbitMQ я не нашел никакой функции «задержки», и это лучшее решение, которое я до сих пор предлагал. Я хочу избежать занятой петли во время повторного заказа.