首页 > 解决方案 > 如何为 celery-sqs 中的不同队列设置不同的 visibility_timeout

问题描述

我正在使用 celery 和 sqs 进行后台任务处理。我们有多个任务在运行,我想为不同的任务设置不同的visibility_timeout;是否可以在 settings.py 文件中执行此操作。当前的 settings.py 文件是

BROKER_TRANSPORT_OPTIONS = {
    'region': 'ap-southeast-1',
    'polling_interval': 10,
    'queue_name_prefix': 'dev-',
    'visibility_timeout': 43200,
}

标签: celeryamazon-sqsdjango-celery

解决方案


这应该有几种不同的方式。我相信您可以为您的案例做的最直接的事情是利用Celery 的任务路由功能。配置可能看起来像这样

app.conf.task_routes = ([
    ('feed.tasks.*', {'queue': 'feeds'}),
    ('web.tasks.*', {'queue': 'web'}),
    (re.compile(r'(video|image)\.tasks\..*'), {'queue': 'media'}),
],)

另请参阅:消息路由

或者,您也可以“即时”路由任务,在发送任务时随心所欲地覆盖queue/的应用程序默认值。routing_key例如...

>>> from feeds.tasks import import_feed
>>> import_feed.apply_async(args=['http://cnn.com/rss'],
...                         queue='feed_tasks',
...                         routing_key='feed.import')

推荐阅读