在SQS上使用路由键的芹菜任务

时间:2013-05-18 06:48:03

标签: django-celery amazon-sqs celery-task

我有一个django芹菜设置,我正在从rabbitmq切换到使用SQS作为经纪人。我发现用routing_key值修饰的任务不会在代理中生成消息吗?

设置为:

CELERY_QUEUES = {
    "default": {
        "exchange": "default", 
        "binding_key": "default"},
    "sentry": {
        "exchange": "default",
        "binding_key": "sentry"},
}

CELERY_DEFAULT_QUEUE = "default"
CELERY_DEFAULT_EXCHANGE = "default"
CELERY_DEFAULT_EXCHANGE_TYPE = "direct"
CELERY_DEFAULT_ROUTING_KEY = "default"

任务定义为

@task(routing_key = 'sentry', ignore_result = True)
def doSomething():
  print "Hello"

doSomething.delay() # No message is produced

一切都路由到默认队列。兔子mq一切正常吗?

Amazon SQS控制台显示队列'sentry',但没有消息发送给它(我不确定是什么创建了队列)

奖励:不同寻常的是,当我第一次尝试这个时(大约4个小时前),有些消息确实出现在哨兵队列中?什么可能导致这种情况?

由于

1 个答案:

答案 0 :(得分:1)

我尝试了一个改变你的例子。我没有在任务装饰器中定义路由键,而是在对任务的调用中定义了队列。我将呼叫从“延迟”更改为“apply_async”

所以我的代码看起来像

@task
def doSomething():
    print "Hello"


doSomething.apply_async(queue='sentry')