Estoy trabajando en una aplicación de Rails donde los reembolsos de clientes se entregan a un trabajador de la maquiladora. Si falla un reembolso (porque no podemos comunicarnos con el procesador de pagos en ese momento) quiero volver a ponerle el pedido en el trabajo.vuelva a colocar un trabajo de explotación en RabbitMQ
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
¿Hay alguna manera mejor de hacer esto que arriba? No he encontrado ninguna característica de "demora" en RabbitMQ, y esta es la mejor solución que he encontrado hasta ahora. Quiero evitar un bucle ocupado mientras realizo la recarga.
apio lo hace para tareas con eta/countdown. Simplemente se aferra a los mensajes, y hay un planificador que ejecuta las tareas cuando se cumple el eta. Como los mensajes deben ser reconocidos, aferrarse a ellos no es un problema, aunque es un poco peculiar cuando se usan recuentos de precaptura de QoS, ya que tenemos que incrementar el conteo de captación previa cada vez que se recibe un mensaje y disminuirlo cuando el mensaje eta ha sido procesado. – asksol