多个工作节点上的 Django + Celery 任务
Django + Celery tasks on multiple worker nodes
我在同一台虚拟机上部署了 django(1.10)
+ celery(4.x)
,rabbitmq
是代理(在同一台机器上)。
我想在多节点架构上开发相同的应用程序,就像我可以复制多个工作节点,并将任务快速扩展到 运行。
在这里,
- 如何为此架构配置带有 rabbitmq 的 celery?
- 在其他工作节点上,应该如何设置?
您应该在一个节点中安装 borker 并对其进行配置,以便其他节点的工作人员可以访问它。
为此,您可以在 rabbitmq 上创建一个新的 user/vhost。
# add new user
sudo rabbitmqctl add_user <user> <password>
# add new virtual host
sudo rabbitmqctl add_vhost <vhost_name>
# set permissions for user on vhost
sudo rabbitmqctl set_permissions -p <vhost_name> <user> ".*" ".*" ".*"
# restart rabbit
sudo rabbitmqctl restart
从其他节点,你可以排队任务,或者你可以只 运行 工作人员来消费任务。
from celery import Celery
app = Celery('tasks', backend='amqp',
broker='amqp://<user>:<password>@<ip>/<vhost>')
def add(x, y):
return x + y
如果您有这样的文件(比如 task.py
),您可以使用 add.delay() 对任务进行排队。
您也可以使用
启动 worker
celery worker -A task -l info
您可以在此处查看我的回答,以简要了解如何 run tasks on remote machines. For a step by step process, you can checkout a post i have written on scaling celery。
我在同一台虚拟机上部署了 django(1.10)
+ celery(4.x)
,rabbitmq
是代理(在同一台机器上)。
我想在多节点架构上开发相同的应用程序,就像我可以复制多个工作节点,并将任务快速扩展到 运行。
在这里,
- 如何为此架构配置带有 rabbitmq 的 celery?
- 在其他工作节点上,应该如何设置?
您应该在一个节点中安装 borker 并对其进行配置,以便其他节点的工作人员可以访问它。
为此,您可以在 rabbitmq 上创建一个新的 user/vhost。
# add new user
sudo rabbitmqctl add_user <user> <password>
# add new virtual host
sudo rabbitmqctl add_vhost <vhost_name>
# set permissions for user on vhost
sudo rabbitmqctl set_permissions -p <vhost_name> <user> ".*" ".*" ".*"
# restart rabbit
sudo rabbitmqctl restart
从其他节点,你可以排队任务,或者你可以只 运行 工作人员来消费任务。
from celery import Celery
app = Celery('tasks', backend='amqp',
broker='amqp://<user>:<password>@<ip>/<vhost>')
def add(x, y):
return x + y
如果您有这样的文件(比如 task.py
),您可以使用 add.delay() 对任务进行排队。
您也可以使用
启动 workercelery worker -A task -l info
您可以在此处查看我的回答,以简要了解如何 run tasks on remote machines. For a step by step process, you can checkout a post i have written on scaling celery。