Я работаю над приложением направляющих, где клиент возмещает, вручены рабочему Предприятия с потогонной системой. Если возмещение перестало работать (потому что мы не можем достигнуть платежного процессора в то время), я хочу повторно поставить задание в очередь.
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, и это - лучшие решения, которые я предложил до сих пор. Я хочу избежать занятого цикла в то время как переорганизация очередей.
Не похоже, что AMQP (или, по крайней мере, RabbitMQ) поддерживает идею "delay this job". " Таким образом, подход к повторному получению одной и той же работы изнутри рабочего, если он не удается, кажется лучшим решением на данный момент.
У меня есть код, работающий в демонстрационной среде, и он пока удовлетворяет мои потребности.
Ты смотрел на такие вещи, как "Руот" и "Минион"?
Здесь есть несколько ссылок: http://delicious.com/alexisrichardson/rabbitmq+work+ruby
Вы также можете попробовать Сельдерей, который не говорит на родном Ruby, но говорит на HTTP+JSON.
Все вышеперечисленное работает с RabbitMQ, так что может вам помочь.
Cheers
alexis
Есть ли служба доставки по времени? Вы отправите сообщение для доставки в качестве полезного груза, завернув его с указанием времени доставки, и сервис будет держать сообщение до тех пор, пока не будет достигнуто указанное время. Насколько я знаю, ничего подобного не существует на RabbitMQ-сервере или в клиентских библиотеках AMQP, но это было бы полезно.
.