'da bir terfi işi yeniden işleme Müşteri geri ödemelerinin bir Sweatshop çalışanına teslim edildiği bir Rails uygulaması üzerinde çalışıyorum. Geri ödeme başarısız olursa (o anda ödeme işlemcisine ulaşamıyoruz çünkü) işi yeniden yapmak istiyorum.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
Bunu yapmaktan daha iyi bir yolu var mı? RabbitMQ'da hiçbir "gecikme" özelliği bulamadım ve bu şimdiye kadar ortaya koyduğum en iyi çözüm. Requeueing sırasında yoğun bir döngüden kaçınmak istiyorum.
kereviz bunu bir eta/geri sayım ile gerçekleştirir. Sadece mesajlara dayanıyor ve eta yerine getirildiğinde görevleri yürüten bir zamanlayıcı var. Mesajların onaylanması gerektiğinden, bunlara bağlı kalmak bir sorun değildir, ancak QoS ön alım sayıları kullanılırken ilginçtir, çünkü eta'lı bir mesaj her alındığında ön yükleme sayımını arttırmalı ve eta mesajı işlendi. – asksol