Подключение к облаку 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
Я не могу понять, как это исправить.