2017-03-02 45 views
0

我使用Celery和RabbitMQ作为经纪人。将不同的任务路由到不同的队列

创建芹菜应用实例的代码是

from celery import Celery 

name = __file__.split('.')[0] 

app = Celery(name) 
app.config_from_object('celery_config') 


@app.task 
def fetch_url(url): 
    resp = requests.get(url) 
    print resp.status_code 

@app.task 
def post(url, **kwargs): 
    body = kwargs.get(payload) 
    auth = kwrags.get(auth) 
    resp = requests.put(url, data=body, auth=auth) 

现在我想有2个独立的队列,一个用于GET和一个POST。

现在我知道,我必须定义芹菜配置模块的2个队列状

CELERY_QUEUES = (
    Queue('default', Exchange('default'), routing_key='default'), 
    Queue('get', Exchange('get')), 
    Queue('post', Exchange('post')), 
) 

什么我不明白到底是什么字符串指定“routing_key”选项?它应该是任务的名称(在这种情况下获得&后)还是有定义routing_key的规则?

回答

0

不需要定义队列或处理路由密钥,绑定或交换简单任务路由的情况。现在使用自动路由(版本4.1)进行简化。(http://docs.celeryproject.org/en/latest/userguide/routing.html#automatic-routing

  1. 命名您的任务。例如,让我们说你给名称如下。

@app.task(name='get_task') def fetch_url(url):

@app.task(name='post_task') def post(url):

  • 添加下面一行在你的芹菜配置文件来路由任务,以适当的队列。
  • task_routes = { 'get_task': {'queue': 'get_queue'}, 'post_task': {'queue': 'post_queue'} }

    由于task_create_missing_queues配置是默认启用的,芹菜将承担您在创建队列的照顾。

    相关问题