Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Amazon-SQS + Django-Celery creates thousands of queues (a queue for every message)

I am looking for a place to start troubleshooting this problem.

here are the changes made in the settings.py

#Rabbit MQ settings
#===============================================================================
# BROKER_HOST = "localhost"
# BROKER_PORT = 5672
# BROKER_USER = "vei_0"
# BROKER_PASSWORD = "1234"
# BROKER_VHOST = "videoencoder"
#===============================================================================




DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = "xxxx"
AWS_SECRET_ACCESS_KEY = "xxxx"
AWS_STORAGE_BUCKET_NAME = "images"
#Amazon SQS settings.
BROKER_TRANSPORT = 'sqs'
BROKER_TRANSPORT_OPTIONS = {
    'region': 'us-east-1',
}
BROKER_USER = AWS_ACCESS_KEY_ID
BROKER_PASSWORD = AWS_SECRET_ACCESS_KEY
CELERY_DEFAULT_QUEUE = 'hardwaretaskqueue'
CELERY_QUEUES = {
    CELERY_DEFAULT_QUEUE: {
        'exchange': CELERY_DEFAULT_QUEUE,
        'binding_key': CELERY_DEFAULT_QUEUE,
    }
}


CELERYD_CONCURRENCY = 2
CELERY_TASK_RESULT_EXPIRES = 120
CELERY_RESULT_BACKEND = "amqp"

I woke up this morning to a message from amazon saying "Did you mean to make a bijillion queues?"

like image 408
michael Avatar asked May 16 '12 15:05

michael


1 Answers

When using the CELERY_RESULT_BACKEND = 'amqp' a new queue is created for each result message. To avoid this you can simply use another CELERY_RESULT_BACKEND such as a database or Redis. Or if you aren't interested in the results then you can set CELERY_IGNORE_RESULT = True.

like image 103
Mark Lavin Avatar answered Oct 05 '22 23:10

Mark Lavin