【发布时间】:2019-01-15 01:20:18
【问题描述】:
我正在尝试开发一个由侦听器组成的应用程序,该侦听器将事件发送到 RabbitMQ,Celery 从队列中提取事件。
在本地运行所有组件时,我的应用程序按预期工作。如果我的侦听器在本地运行,并且所有其他组件都在 Docker 容器中运行,它也可以工作。但是如果我也在容器中运行我的监听器,那么 Celery 就不会收到任何事件。
该应用程序基于 Django,与 Celery 的连接是这样完成的:
app = Celery('mini_iot')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
在 settings.py 我有:
CELERY_BROKER_URL = 'amqp://rabbitmq'
其中 rabbitmq 是容器的主机名。
监听器使用delay函数向Celery发送任务。
docker-compose 是:
version: '3'
services:
listener:
image: core-app
command: python manage.py runscript listener
volumes:
- .:/mini-iot
depends_on:
- rabbitmq
- mqtt
working_dir: /mini-iot/mini_iot
worker:
image: core-app
command: celery -A mini_iot worker --loglevel=info -f log2.txt
volumes:
- .:/mini-iot
depends_on:
- rabbitmq
- mqtt
working_dir: /mini-iot/mini_iot
rabbitmq:
image: rabbitmq:3.6.10
volumes:
- /var/lib/rabbitmq:/var/lib/rabbitmq
ports:
- "5672:5672"
- "15672:15672"
谁能帮我调试一下问题,或者有谁知道问题出在哪里?
容器可以在正确的端口上相互通信。我已经使用 telnet 进行了测试。
【问题讨论】:
-
docker设置的描述是必要的,所以人们可以提供帮助。对于这种情况,容器的网络配置之类的东西是必不可少的。
-
谢谢,我更新了问题
-
任何错误信息?
-
不出现错误信息
标签: django docker rabbitmq celery