在同一台服务器上运行两个单独的celeni守护进程



我有一台服务器,其中有两个项目,每个项目都有不同的用途,但两者都需要一个使用芹菜运行调度程序的任务。

我想在同一台服务器上创建一个单独的celenic守护程序,我尝试创建一个差异配置文件,并用2个差异进程运行它。

app1任务.py

from celery import task
@task()
def task_1(data):
    print("run task 1.")

app1配置文件:

# Name of nodes to start, here we have a single node
CELERYD_NODES="w1"
# Where to chdir at start.
CELERYD_CHDIR="/usr/app1/task_scheduler/"
# Extra arguments to celeryd
CELERYD_OPTS="--time-limit=300 --concurrency=8"
# Name of the celery config module.
CELERY_CONFIG_MODULE="celeryconfig"
# %n will be replaced with the nodename.
CELERYD_LOG_FILE="/tmp/%n.log"
CELERYD_PID_FILE="/tmp/%n.pid"

app1,celeryconfig.py

BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_IMPORTS=("tasks")
CELERY_RESULT_BACKEND = "amqp"
CELERY_ENABLE_UTC = False

app2任务.py

from celery import task
@task()
def task_2(data):
    print("run task 2.")

除了CELERYD_CHDIRCELERYD_NODES之外,app2配置与app1配置相同。app2-celeryconfig.py与app1-相同

我的问题是当我在app1 上添加新任务时

from tasks import *
if __name__ == "__main__":
   ...
   task_1.apply_async(args=data, eta=t)

task1在app1节点上按预期运行,但此任务全部添加到app2节点。因为节点2没有定义此函数,所以在节点2日志上引发了not_found函数。它仍然可以工作,但我如何设置使task_1只发送到app1芹菜节点。我的意思是节点2将不会接收task_1任务。

应用程序可以使用虚拟主机进行分离

要在使用RabbitMQ时创建虚拟主机,您应该看到:http://www.rabbitmq.com/access-control.html

虚拟主机是传输URL的路径部分:

amqp://user:pass@host:port/vhost

初始斜杠将被忽略,因此如果您的vhost是/foo,则需要包括额外的斜线,比如:

amqp://guest:guest@localhosts//foo

一个初始化脚本配置示例,使用两个单独的应用程序:

CELERYD_NODES="w1 w2"
CELERYD_OPTS="-A:w1 proj1 -A:w2 proj2 --concurrency:w1=8 --concurrency:w2=4"

有关celery multi选项语法的更多信息,请参阅:http://docs.celeryproject.org/en/latest/reference/celery.bin.multi.html

然后,您只需将应用程序proj1配置为使用与proj2不同的虚拟主机。

相关内容

  • 没有找到相关文章

最新更新