即使定义了不同的队列和路由键,Celery也会获得相同的任务

时间:2016-02-17 05:30:52

标签: multithreading python-2.7 celery celery-task

我的芹菜配置中有设置

CELERY_QUEUES = (
                    Queue('oracle', Exchange('exchange1'), routing_key='bitch'),
                    Queue('neo',  Exchange('exchange2'),   routing_key='check'),
                    Queue('morpheus',  Exchange('exchange3'),  routing_key='fromlocal'),
                    Queue('trinity', routing_key='getme.*'),
                    Queue('xxx', routing_key='showme.#'),
                    ),

CELERY_ROUTES={
                    'whois.tasks.parsewhois':{
                        'queue':'trinity',
                        'routing_key':'getme.*',
                        },
                    'whois.tasks.fororacle':{
                        'queue':'xxx',
                        'routing_key':'showme.#',
                        },

                    },

我将我的2名工人视为

celery -A jarvis worker -l info -Q trinity --hostname=trinity@%h
celery -A jarvis worker -l info -Q xxx --hostname=xxx@%h

现在我向工作人员发送任务

parsewhois.apply_async(args['20596696'],queue='trinity',routing_key='getme')

上述任务仅发送到三位一体队列,但是当我运行以下命令时:

fororacle.apply_async(args=[10],queue='xxx',routing_key='showme')

现在此任务进入三位一体队列和xxx队列,两者都获得相同的任务并执行相同的任务。 是不是我没有得到主题和直接的差异或我的配置是错误的。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

尝试使用不同的工作名称执行celery命令:

celery -A jarvis worker -l info -Q trinity --hostname=trinity@%h -n worker1.%h
celery -A jarvis worker -l info -Q xxx --hostname=xxx@%h -n worker2.%h

希望有所帮助