谁能解释一下Django中芹菜RabbitMQ中的这些行?什么时候使用?我在芹菜RabbitMq中运行了2个任务(django中的加法操作和端点),没有这些行成功。所以请解释一下什么时候会在settings.py和芹菜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',)
Thanks in advance
即使没有这些显式设置,您的任务仍然运行的原因是因为芹菜在其文档中为它们提供了默认值。
- https://docs.celeryproject.org/en/stable/userguide/configuration.html
为了可视化,这里有一个运行,我们不会设置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//
,这是RabbitMQ的默认值,如文档中所述:
broker_url
默认值:"amqp://">
传输部分是要使用的代理实现默认为amqp,(如果安装了,则使用librabbitmq)或回落到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//
如果值与默认值不同,则需要更改这些设置。有关每个可配置设置的详细信息,请参阅文档。
- 重写默认值的一个特殊用例是在上面的
broker_url
的例子中看到的,我们需要显式地将其设置为使用在amqp://guest:a-more-secure-password@127.0.0.1:666
中运行的RabbitMQ,而不是假设的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)
。
其他引用:
- RabbitMQ默认用户guest:guest
- RabbitMQ默认端口5672