В настоящее время мы используем Resque в JRuby и используем два способа запуска Worker при разработке.
QUEUE=* jruby -J-cp /path/to/library -S rake environment resque:work
- Программно, инициализируется с помощью приложения Sinatra Rack (или чего-то еще), в конце концов вызывая класс с:
def start
@worker = Resque::Worker.new(@queues)
@worker.verbose = @vervose
@worker.work(@interval)
end
def stop
@worker.try(:shutdown)
end
Хотя оба эти решения приемлемы для нас в разработке. Я обеспокоен тем, как это будет работать при развертывании, например, в Tomcat.
Обычно в Ruby вы бы порождали или демонизировали рабочих, а затем использовали инструмент мониторинга для наблюдения за pid.
Имеет ли смысл запускать Workers программно при развертывании? Мне интересно, если он запускает новый поток в Java или мешает процессу jruby, если нет, я должен использовать еще одну библиотеку планирования, как кварц, чтобы запустить работника? или грабли, запускаемые при развертывании?
Я мог бы создать модель «Рабочий» и затем отслеживать работники в БД, но для меня это не имеет смысла.
Любая помощь или знания будут оценены.
Спасибо.
Refs:
https://github.com/defunkt/resque
http://rubydoc.info/github/defunkt/resque/master/Resque/
http://blog.thomasmango.com/post/636319317/resque-in-production
https://gist.github.com/486161