SQS采用Celery配置

时间:2012-12-13 18:52:43

标签: python django celery

我正在尝试为Celery设置Amazon SQS,我有以下配置:

BROKER_BACKEND = "SQS"
BROKER_TRANSPORT_OPTIONS = {
    'region': 'us-east-1',
}
AWS_ACCESS_KEY_ID = # access id
AWS_SECRET_ACCESS_KEY = # secret access key
os.environ.setdefault("AWS_ACCESS_KEY_ID", AWS_ACCESS_KEY_ID)
os.environ.setdefault("AWS_SECRET_ACCESS_KEY", AWS_SECRET_ACCESS_KEY)

BROKER_URL = 'sqs://'

CELERY_IMPORTS = ("tasks", )
CELERY_TASK_RESULT_EXPIRES = 300

CELERY_DEFAULT_QUEUE = #queue name
CELERY_DEFAULT_EXCHANGE = CELERY_DEFAULT_QUEUE
CELERY_DEFAULT_EXCHANGE_TYPE = CELERY_DEFAULT_QUEUE
CELERY_DEFAULT_ROUTING_KEY = CELERY_DEFAULT_QUEUE
CELERY_QUEUES = {
    CELERY_DEFAULT_QUEUE: {
        'exchange': CELERY_DEFAULT_QUEUE,
        'binding_key': CELERY_DEFAULT_QUEUE,
    }
}

在我的AWS账户上的SQS配置中,我有一个名称写在CELERY_DEFAULT_QUEUE中的队列。当我在本地运行时,一切正常......但由于某种原因,它在SQS上创建了另一个名为<user_id>-celery-pidbox的队列。这样的事情:MyUser-MacBook-Pro-local-celery-pidbox

这是正常的吗?当我使用指定的名称创建队列时,为什么要创建另一个队列?否则,它的工作,不确定是否需要其他队列或我错过了什么?感谢任何帮助,我在文档中找不到这个。

修改

原来这是正常的。由于某种原因,django-celery执行此操作,它会为您访问要访问的队列的每个框创建一个队列。他们将在未来的版本中修复此问题。如果有人知道如何暂时解决这个问题,请告诉我,谢谢!

2 个答案:

答案 0 :(得分:5)

这实际上是一种很好的行为,因此您可以监控哪些实例(IP或本地名称)正在访问您的SQS帐户。这只是一个请求,所以它不会花费你任何东西。

答案 1 :(得分:3)

你需要设置这些:

internal class NewIdeaDto
    {
        public NewIdeaDto(string name, string description, int sessionId)
        {
            Name = name;
            Description = description;
            SessionId = sessionId;
        }

        public string Name { get; set; }
        public string Description { get; set; }
        public int SessionId { get; set; }
    }

//Arrange
var newIdea = new NewIdeaDto("Name", "", 1);

// Act
var response = await _client.PostAsJsonAsync("/api/ideas/create", newIdea);

// Assert
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);

要禁用它。