【发布时间】:2018-04-05 02:32:09
【问题描述】:
我在我的 django 项目中使用 celery。它在我的 MacBook 和 CentOS VM 上运行良好。当我在 docker 容器中运行它时,包含 add.delay(add 是一个任务) 方法的请求总是被阻止。
我在github上创建了一个demo项目:https://github.com/fengyouchao/proj_test
我的任务:
@shared_task
def add(x, y):
return x + y
我的看法:
def index(request):
a = int(request.GET.get('a', 1))
b = int(request.GET.get('b', 2))
add.delay(a, b)
return HttpResponse("Hello world")
def hello(request):
return HttpResponse("hello")
在演示项目中,我在 docker-compose.yml 中创建了三个服务:
- web - 运行“manage.py runserver 0.0.0.0:8000”的服务
- celery - 运行“celery”的服务
- rabbitmq - 运行 rabbitmq-server 的服务
运行服务
docker-compose up
测试
curl localhost:8000 # blocked
curl localhost:8000/hello # OK
在当前系统中运行django项目(在docker容器中使用相同的rabbitmq-server)
manage.py runserver 0.0.0.0:18000
测试
curl localhost:18000 # OK , and the "celery" service printed task logs
这个问题困扰了我很久,不知道问题出在哪里。我希望有一个人可以帮助我。谢谢!
【问题讨论】:
-
“被阻止”是什么意思?你能附上相关的日志吗?工人成功连接到rabbitmq?你没有错过
Celery初始化中的包含参数吗? (带有任务文件) -
"blocked" 表示网络服务器没有响应。 Worker 已经成功连接到rabbitmq。我不认为我错过了
Celery初始化中的包含参数。只有在 docker 中启动 web 时才会出现此问题。 -
您可以查看我对另一个 SO 问题的回答,它可能会对您有所帮助:stackoverflow.com/questions/45863053/…
标签: django docker rabbitmq celery