В настоящее время мы используем 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, если нет, следует ли мне использовать еще одну библиотеку планирования, такую как кварц, для запуска рабочего? или задача rake, которая запускается при задаче развертывания?
Я мог бы создать модель Worker, а затем отслеживать рабочих в БД, но для меня это не имеет смысла.
Любая помощь или знания будут оценены.
Спасибо.
Ссылки:
https://github.com/defunkt/resque
http://rubydoc.info/github/defunkt/resque/master/Resque/
http://blog.thomasmango.com/post/636319317/resque-in-production