Как поставить в очередь несуществующего воркера

Я пытаюсь поставить в очередь работника Sidekiq, который не существует в моем проекте, но существует в каком-то другом проекте, использующем тот же сервер Redis.

В нашей текущей ситуации у нас есть два сервера:

  • API-сервер работает на Heroku. Веб-экземпляр для REST API и рабочий процесс с Sidekiq, который прослушивает очередь :api.

  • Сервер обработки работает на AWS ElasticBeanstalk с экземпляром puma, на котором работает REST Full API с Sinatra. Этот экземпляр запускает Sidekiq и слушает очередь :processing

Примечание: Вначале всю работу выполнял наш API, но поскольку некоторые воркеры стали занимать слишком много памяти, мы переключаемся на сервер обработки.


Когда нам нужно выполнить задание на сервере обработки, у нас происходят следующие действия:

  1. Вызовы API POST processing.com/some_job

  2. Обработка очередей SomeJobWorker в очереди processing

  3. Обработка выполняется SomeJobWorker из очереди processing

  4. Обработка звонков POST api.com/webhooks/some_job_result

  5. Очереди API SomeJobResultWorker в очереди api

  6. API выполняется SomeJobResultWorker из очереди processing


Это навело меня на мысль, что если бы я мог каким-то образом напрямую из очереди API-серверSomeJobWorker, то я мог бы избавиться от REST API на нашем сервер обработки.

... тогда я мог бы избавиться от конечной точки webhooks на API-сервер и сделать то же самое с сервер обработки

Я бы закончил с чем-то вроде этого:

  1. Очереди вызовов API SomeJobWorker

  2. Обработка выполняется SomeJobWorker

  3. Обработка очереди SomeJobResultWorker

  4. API выполняется SomeJobResultWorker

Есть ли способ поставить в очередь исполнителя, которого нет в моей локальной кодовой базе?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
220
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть два осколка. Каждый Redis — это осколок. Прочтите эту страницу:

https://github.com/mperham/sidekiq/wiki/Шардинг

Вы можете отправить задание, используя имя класса:

client = Sidekiq::Client.new(PROCESSING_REDIS)
client.push('queue' => 'api', 'class' => 'FooWorker', 'args' => [1,2,"foo"])

Я отметил, что это решает мою проблему, потому что ваш Client.new кажется именно тем, что я хотел, и я не знаю, как я не понял это самостоятельно...

Daniel Costa 04.04.2019 08:08

Что касается сегментирования, кажется, что одна и та же кодовая база может использовать 2 сервера Redis с разными серверами Redis и сбалансировать то, что и куда. Хотя в моем примере я хочу, чтобы 2 разных базовых кода использовали один и тот же сервер Redis.

Daniel Costa 04.04.2019 08:09

Пока у них нет общих очередей, это может работать, но официально не поддерживается. Разные кодовые базы должны иметь разные конфигурации Redis, чтобы их данные были физически различны, как и их код.

Mike Perham 04.04.2019 19:36

Другие вопросы по теме