Nic*_*s C 5 ruby ruby-on-rails message-queue rabbitmq
我正在开发一个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
Run Code Online (Sandbox Code Playgroud)
有没有比上面更好的方法呢?我还没有在RabbitMQ中找到任何"延迟"功能,这是迄今为止我提出的最佳解决方案.我想在重新排队时避免繁忙的循环.
AMQP(或者至少 RabbitMQ)似乎不支持“延迟这项工作”的想法。因此,如果失败,从工作线程内部重新排队相同的作业的方法似乎是目前最好的解决方案。
我的代码在演示环境中运行,到目前为止它满足了我的需求。