Подключение к облаку rabbitMQ с помощью django docker

Я пытаюсь следовать руководству "Microservices Application with Django, Flask, Mysql" на youtube. В этом примере Django приложение использует RabbitMQ (облачная версия) для отправки сообщения, которое должно быть потреблено. Ниже приведен consumer.py

import pika
params = pika.URLParameters('amqps_key')
connection = pika.BlockingConnection(params)
channel = connection.channel()
channel.queue_declare(queue='admin')

def callback(ch, method, properties, body):
    print('Recevied in admin')
    print(body)


channel.basic_consume(queue='admin', on_message_callback=callback, auto_ack=True)

print('Started cosuming')

channel.start_consuming()

channel.close()

У меня есть конечная точка в urls.py, которая вызывает producer.py

Это docker-compose:

version: '3.8'
services:
  backend:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8000:8000
    volumes:
      - .:/app
    depends_on:
      - db
    command: ["./wait-for-it.sh","db:3306","--","python","manage.py","runserver","0.0.0.0:8000"]

  db:
    image: mysql:5.7.36
    restart: always
    environment:
      MYSQL_DATABASE: tutorial_ms_admin
      MYSQL_USER: ms_admin
      MYSQL_PASSWORD: ms_admin
      MYSQL_ROOT_PASSWORD: ms_admin
    volumes:
      - .dbdata:/var/lib/mysql
    ports:
      - 3308:3306

Теперь: если я запускаю docker-compose, затем открываю терминал, захожу в бэкенд-сервис и в оболочке сервиса набираю "python consumer.py", используя Postman и вводя конечную точку, я вижу, что сообщение потребляется (как на экране, так и в панели администрирования облака rabbit).

Если я пытаюсь добавить python consumer.py в качестве команды после "wait-for-it.sh.... ", это не работает. Сообщения застревают в панели администрирования облака Rabbit, как будто ничто их не потребляет. В принципе, я хотел бы не открывать терминал для запуска consumer.py, а сделать так, чтобы он запускался автоматически, как только запустится бэкенд-сервис runserver

Я не могу понять, как это исправить.

Вернуться на верх