В настоящее время я разрешаю очередь в моем приложении писать в Ruby. Я использую sidekiq и есть определить класс уборщица, как показано ниже:Sidekiq и unqueueing in ruby
class Worker
include Sidekiq::Worker
def perform(params)
sleep 10
@@logger.info("--------------------------")
@@logger.info("Request received")
@@logger.info("--------------------------")
end
end
Я называю это с моей главной точки входа под названием «api.rb»
post '/receive/?' do
@@logger.debug("/retrieve endpoint received")
Worker.perform_async @params
end
это работает отлично, и каждый раз, когда сон выполняется следующая задача в очереди.
В моем случае мне нужно освободить или запустить следующий элемент в очереди только тогда, когда я его решаю. он будет инициирован внешним событием.
в моем 'api.rb', я добавил:
post '/response/?' do
next_task
end
Путь код работает так, что '/ получить' может в очередь 10 запросов. первый запрос инициирует конкретное действие (отправляется почтовая команда на сервер).
Я ожидаю, что удаленный сервер отправит мне запрос через «/ response», чтобы сообщить мне, что действие закончено. когда этот ответ получен, я использую api 'next_task' api для удаления предыдущей задачи, которая была запущена и теперь завершена, и переходим к следующей очереди.
Любая идея, как создать настраиваемый триггер, чтобы разблокировать и запустить новое задание. Есть ли СИГНАЛ, который позволяет мне избегать рамки sidekiq, чтобы освободиться, пока я не отправлю конкретный сигнал.
Merci
То, что я пытаюсь сделать, это контролировать начало следующей работы. По умолчанию очередь автоматически запускает новое задание, когда предыдущий закончен. В моем случае мне нужно запустить следующее задание только тогда, когда я попрошу, потому что задание выполняется на удаленном сервере, и я не могу контролировать, когда удаленная задача завершена. – Seb
Да, это то, что я написал. Используйте очередь sidekiq так же, как «пробуждение-событие», каждые 10 секунд и сохраняйте реальную очередь в базе данных - в модели «Работа» в моем примере. –