settings.py 文件中的 Celery 配置

Celery configuration in settings.py file

谁能解释一下 Django 中 celery RabbitMQ 中的这些行。什么时候使用? 我在 celery RabbitMq 中 运行 2 个任务(django 中的加法操作和端点)没有成功地完成这些行。所以请解释一下什么时候会在settings.py和celery rabbitmq

中使用
CELERY_BROKER_URL = 'amqp://localhost'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'

__init__.py :
from .celery import app as celery_app

__all__ = ('celery_app',)

提前致谢

即使没有这些显式设置,您的任务仍然 运行ning 的原因是因为 Celery 在其文档中为它们提供了默认值。

为了形象化,这是一个 运行,我们不会设置 broker_url

$ cat > tasks.py 
from celery import Celery

app = Celery('my_app')
$ celery --app=tasks worker --loglevel=INFO
...
- ** ---------- [config]
- ** ---------- .> app:         my_app:0x7f5a09295160
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 5 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
...
  • 如您所见,即使我们没有显式设置代理,它也默认为 transport: amqp://guest:**@localhost:5672//,这是 docs:
  • 中所述的 RabbitMQ 的默认值

broker_url

Default: "amqp://"

The transport part is the broker implementation to use, and the default is amqp, (uses librabbitmq if installed or falls back to pyamqp).

这是一个 运行,我们将在其中明确设置 broker_url。要查看差异,假设我们的 RabbitMQ 代理使用不同的密码侦听本地主机 127.0.0.1 的端口 666。

$ cat > tasks.py 
from celery import Celery

app = Celery('my_app')

app.conf.broker_url = "amqp://guest:a-more-secure-password@127.0.0.1:666"
$ celery --app=tasks worker --loglevel=INFO
...
- ** ---------- [config]
- ** ---------- .> app:         my_app:0x7fb02579f160
- ** ---------- .> transport:   amqp://guest:**@127.0.0.1:666//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 5 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
...
  • 现在,代理已设置为我们配置的值 transport: amqp://guest:**@127.0.0.1:666//

如果值与默认值不同,您需要更改这些设置。有关每个可配置设置的更多详细信息,请参阅 docs.

  • 覆盖默认值的一个特殊用例如上面 broker_url 的示例所示,我们需要明确设置它以使用 [=17= 中的 RabbitMQ 运行ning ] 而不是假定的默认值 amqp://guest:guest@127.0.0.1:5672 如果我们不设置它会导致错误 consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 104] Connection reset by peer. Trying again in 2.00 seconds... (1/100)

其他参考资料: