Рубрики
Без рубрики

Развернуть сельдерея и рабби с сочиной

Поздно, я много работал с Fastapi. Недавно у меня было требование. Мне нужно было рвать … с меткой Python, сельдереем, учебником.

Поздно, я много работал с Fastapi. Недавно у меня было требование. Мне нужно было запускать задачи на заднем плане после того, как запрос был сделан. Так что что-то вроде, когда запрос получен, добавьте его в список задач и верните ответ. Задача будет сделана на заднем плане.

Я несколько знал о Сельдерей Однако никогда не было необходимости работать с этим. Поэтому я наконец решил использовать сельдерей и мальчик о мальчике, я удивлен.

Что такое сельдерей

Таким образом, сельдерей – планировщик задач. То, что я описал выше в первом абзаце, сельдерей делает именно это! Мы пропускаем это задачу, и она работает на заднем плане.

Он в основном запускает задачу в виде синхронной функции, которая эффективно делает функцию прогон в фоновом режиме. Вы можете прочитать больше об этом здесь Отказ

Однако для того, чтобы сельдерей бежать должным образом, нужно брокер Отказ

Что такое брокер?

Брокер будет держать список всех задач, которые должны быть выполнены и соответственно поставку сельдерей с задачами. Сельдерей тогда будет использовать задачу и работать над ней.

Прямо из Google:

Брокер – это человек или фирма, которая организует сделки между покупателем и продавцом для комиссии, когда сделка выполнена.

Это в значительной степени суммирует это. В нашем случае мы Продавец Сельдерей – это Покупатель и мы будем использовать брокер между тем, чтобы справиться со всеми задачами. Брокеры также называются очередями сообщений или очереди задач.

Некоторые брокеры, с которыми работает сельдерей, являются:

Кролик

В этой статье я буду в первую очередь использовать Кролик как брокер. Вы можете прочитать, как Используйте Redis с сельдереем Отказ

Самый простой способ настройки rabbitmq – использовать документ Docker. Используя следующую команду, контейнер с rabritmq может быть развернут в течение нескольких секунд.

docker run -d --rm -it --hostname my-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

В приведенной выше команде Управление изображение используется. Вы можете проверить Другие доступные изображения здесь

Разбие приведенная выше командование:

  • Мы отображаем 15672 порт контейнера к нашему хозяину
  • Мы отображаем 5672 порт контейнера к нашему хозяину.

Это потому, что 15672 Порт обслуживает графический интерфейс для rabbitmq и 5672 это как Сельдерей будет общаться с этим.

Работник

Теперь, когда у нас есть наш брокер на месте, давайте использовать DockerFile для развертывания Сельдерей Отказ Сельдерей, так как он делает задачи на заднем плане, называется рабочий Отказ

Мы построим рабочий со следующим докерафилом:

FROM python:3.6

# copy contents of project into docker
COPY ./ /app/

# We will use internal functions of the API
# So install all dependencies of the API
RUN cd app && pip install -r requirements.txt

WORKDIR /app

ENTRYPOINT celery -A worker worker --loglevel=INFO

Используя вышеупомянутый DockerFile, мы можем развернуть работник.

Использование композита

Теперь, когда у нас есть две услуги, готовые, мы готовы написать наше Docker Compose файл. Узнайте больше о Docker Compose здесь Отказ

Обычно работник работает вместе с API, а API делает звонки рабочему, чтобы запускать рабочие задачи на заднем плане.

В нашем случае мы будем создавать два контейнера:

  • Кролик контейнер
  • Рабочий контейнер

Мы хотим, чтобы наш работник получить доступ к контейнеру Rabbitmq через сеть и соответственно использовать его как брокер.

Большую часть времени вам, вероятно, также понадобится контейнер API, который также будет взаимодействовать с работником, используя сеть.

Ниже приведен файл Compose:

version: "3.7"

services:
  # Deploy the broker.
  rabbitmq_server:
    image: rabbitmq:3-management
    ports:
      # Expose the port for the worker to add/get tasks
      - 5672:5672
      # OPTIONAL: Expose the GUI port
      - 15672:15672

  # Deploy the worker
  worker:
    # Build using the worker Dockerfile
    build:
      context: .
      dockerfile: worker.Dockerfile
    # Need to access the database
    # OPTIONAL: If you worker needs to access your db that is deployed
    # locally, then make the network mode as host.
    network_mode: host
    # Pass the rabbitmq_uri as env varible in order to
    # connect to our service
    environment:
      # NOTE: Below we are using 127.0.0.1 because this container
      # will run on the host network, thus it will have access to the
      # host network.
      # If it would not have run locally, we would have had to
      # connect using the service name like following:
      # amqp:rabbitmq_server:5672
      rabbitmq_uri: amqp://127.0.0.1:5672
    # Make it wait for rabbitmq deployment
    depends_on: 
      - rabbitmq_server

С вышеуказанным файлом вы можете развернуть его следующим образом:

docker-compose -f docker-compose.yml up --detach --scale worker=2 --build

В приведенной выше команде мы масштабируем рабочий Услуга, чтобы иметь 2 контейнера.

Гочь, чтобы посмотреть на

Подключение URI для rabbitmq

Скажем, у нас есть rabbitmq, развернутый в контейнере под названием кролик . Теперь, от наших рабочий Контейнер, который нам нужно получить доступ к rabbitmq, чтобы добавить задания. В этом случае нам придется подключиться к Rabbitmq с помощью URI связи. Этот URI будет что-то вроде:



> Note that we have name of the container in the URI. This will map the URI to the network of that container.

Typically this URI should be something like `amqp://localhost:5672`

However, now, let's say we need to run our container in the network. This can be easily done using the `network_mode: host` field in the compose file or the `--network=host` arguement to the deploy command.

In cases like this, our container will have the network of the host which means the RabbitMQ container will be accessible as it will be accessible to the network which will be:



```amqp://127.0.0.1:5672```



> Note that we exposed the port 5672 when deploying the rabbitmq container.

This article is posted on [my personal blogging site](https://blog.deepjyoti30.dev/celery_compose)

Оригинал: “https://dev.to/deepjyoti30/deploy-celery-rabbitmq-with-compose-4pfe”