Я работаю над многопользовательским деревом. Он использует resque gem для фоновых процессов. Чтобы избежать многопользовательских конфликтов во время выполнения, я хочу использовать шаблон команды и хранить пользовательские действия в очереди resque, поэтому, если кто-то удаляет ветку, другой пользователь не может редактировать дочерние элементы этой ветви.Использование resque для реализации шаблона команды
Он работает, но он довольно медленно выбирает работу в первый раз из очереди, потому что работник resque проверяет задания, используя интервал в 5 секунд. Это значительно замедляет редактирование интерфейса. Это possibe сделать что-то вроде этого:
cmd = MyCommand.create!(:attr1 => 'foo', :attr2 => 'bar')
Resque.enqueue(MyCommand, cmd.id)
workers = Resque.workers.select {|w| w.queues.include?('my_queue') }
raise "Should be only one queue for commands!" if workers.size != 1
not_done = true
while not_done
not_done = workers[0].process
end
Он делает то, что мне нужно, но мне интересно, если есть более элегантный способ сделать это. Кроме того, процесс - это устаревший метод для экземпляров Worker.
Я впечатлен скоростью resque/redis и не против, если есть латентность менее 10-20 миллисекунд для графического интерфейса. Resque также позволяет использовать отдельный процессор для определенных задач из коробки. Так что пока я не вижу сильной причины переключиться на memcached или inmemory solution – dimus