我在Django项目中使用 celery 。它在我的MacBook和CentOS VM上运行良好。当我在docker容器中运行它时,包含add.delay(add是一个任务)方法的请求始终被阻止。

我在github上创建了一个演示项目: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服务器的服务

  • 运行服务
    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容器用作代理,因此在settings.py中添加了CELERY_BROKER_URL

    当我在manage.py django shell中运行add.delay()时,它在容器内被击中,但在生产中运行良好

    所以我添加了以下更改,它开始起作用

    app = Celery('app', broker="amqp://rabbitmq")
    

    关于django - Celery task.delay在docker容器中被阻止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46908063/

    10-16 16:28