запросите работу потогонного цеха в RabbitMQ
-
18-09-2019 - |
Вопрос
Я работаю над приложением Rails, в котором возмещение средств клиентов передается работнику потогонного цеха.Если возврат не удается (потому что мы не можем связаться с обработчиком платежей в это время) Я хочу запросить задание.
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, и это лучшее решение, которое я придумал на данный момент.Я хочу избежать цикла занятости во время выполнения запроса.
Решение 3
Не похоже, что AMQP (или, по крайней мере, RabbitMQ) поддерживает идею "отложить это задание". Поэтому подход к повторной постановке в очередь того же задания изнутри worker в случае сбоя представляется лучшим решением на данный момент.
У меня есть код, работающий в демонстрационной среде, и пока он удовлетворяет моим потребностям.
Другие советы
Вы смотрели на такие вещи, как Ruote и Minion?
Некоторые ссылки здесь: http://delicious.com/alexisrichardson/rabbitmq+work+ruby
Вы также можете попробовать Celery, который не говорит на родном Ruby, но говорит на HTTP + JSON.
Все вышеперечисленное работает с RabbitMQ, поэтому может вам помочь.
Ваше здоровье
алексис
У вас есть служба доставки по расписанию?Вы бы отправили сообщение для доставки в виде полезной нагрузки, включив в него время доставки, и служба сохраняла бы сообщение до тех пор, пока не было достигнуто указанное время.Насколько мне известно, ничего подобного не существует на сервере RabbitMQ или в любой из клиентских библиотек AMQP, но это было бы полезно иметь.