Я пытаюсь поставить в очередь работника Sidekiq, который не существует в моем проекте, но существует в каком-то другом проекте, использующем тот же сервер Redis.
В нашей текущей ситуации у нас есть два сервера:
API-сервер работает на Heroku. Веб-экземпляр для REST API и рабочий процесс с Sidekiq, который прослушивает очередь :api.
Сервер обработки работает на AWS ElasticBeanstalk с экземпляром puma, на котором работает REST Full API с Sinatra. Этот экземпляр запускает Sidekiq и слушает очередь :processing
Примечание: Вначале всю работу выполнял наш API, но поскольку некоторые воркеры стали занимать слишком много памяти, мы переключаемся на сервер обработки.
Когда нам нужно выполнить задание на сервере обработки, у нас происходят следующие действия:
Вызовы API POST processing.com/some_job
Обработка очередей SomeJobWorker в очереди processing
Обработка выполняется SomeJobWorker из очереди processing
Обработка звонков POST api.com/webhooks/some_job_result
Очереди API SomeJobResultWorker в очереди api
API выполняется SomeJobResultWorker из очереди processing
Это навело меня на мысль, что если бы я мог каким-то образом напрямую из очереди API-серверSomeJobWorker, то я мог бы избавиться от REST API на нашем сервер обработки.
... тогда я мог бы избавиться от конечной точки webhooks на API-сервер и сделать то же самое с сервер обработки
Я бы закончил с чем-то вроде этого:
Очереди вызовов API SomeJobWorker
Обработка выполняется SomeJobWorker
Обработка очереди SomeJobResultWorker
API выполняется SomeJobResultWorker
Есть ли способ поставить в очередь исполнителя, которого нет в моей локальной кодовой базе?





У вас есть два осколка. Каждый Redis — это осколок. Прочтите эту страницу:
https://github.com/mperham/sidekiq/wiki/Шардинг
Вы можете отправить задание, используя имя класса:
client = Sidekiq::Client.new(PROCESSING_REDIS)
client.push('queue' => 'api', 'class' => 'FooWorker', 'args' => [1,2,"foo"])
Что касается сегментирования, кажется, что одна и та же кодовая база может использовать 2 сервера Redis с разными серверами Redis и сбалансировать то, что и куда. Хотя в моем примере я хочу, чтобы 2 разных базовых кода использовали один и тот же сервер Redis.
Пока у них нет общих очередей, это может работать, но официально не поддерживается. Разные кодовые базы должны иметь разные конфигурации Redis, чтобы их данные были физически различны, как и их код.
Я отметил, что это решает мою проблему, потому что ваш
Client.newкажется именно тем, что я хотел, и я не знаю, как я не понял это самостоятельно...