将不同的任务路由到不同的队列



我正在将芹菜与兔子用作经纪人。

创建芹菜应用程序实例的代码

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个单独的队列,一个用于获取。

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

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

我不收到的是为'ruting_key'选项指定的字符串?应该是任务的名称(在这种情况下为& post),还是有定义routing_key的规则?

无需定义队列或处理路由键,绑定或交换以作为您的情况来简单任务路由。现在使用自动路由来简化这一点(版本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):

  1. 在您的芹菜配置文件中添加下面的行以将任务路由到适当的队列。

task_routes = { 'get_task': {'queue': 'get_queue'}, 'post_task': {'queue': 'post_queue'} }

由于task_create_missing_queues config是默认启用的,因此芹菜会为您创建队列。

相关内容

  • 没有找到相关文章

最新更新