1

我设置了一个 django celery,我正在从 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

一切都很好地路由到默认队列。不寻常的一切都适用于rabbit mq?

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

奖励:不寻常的是,当我第一次尝试这个时(大约 4 小时前),一些消息似乎确实进入了哨兵队列?这可能是什么原因造成的?

谢谢

4

1 回答 1

1

我尝试了您的示例并进行了一次更改。我没有在任务装饰器中定义路由键,而是在任务调用中定义了队列。我将呼叫从“延迟”更改为“apply_async”

所以我的代码看起来像

@task
def doSomething():
    print "Hello"


doSomething.apply_async(queue='sentry')
于 2013-07-17T05:30:34.720 回答