|
@@ -0,0 +1,127 @@
|
|
|
+.. _broker-sqs:
|
|
|
+
|
|
|
+==================
|
|
|
+ Using Amazon SQS
|
|
|
+==================
|
|
|
+
|
|
|
+.. _broker-sqs-installation:
|
|
|
+
|
|
|
+Installation
|
|
|
+============
|
|
|
+
|
|
|
+For the Amazon SQS support you have to install the `boto`_ library::
|
|
|
+
|
|
|
+ $ pip install -U boto
|
|
|
+
|
|
|
+.. _boto:
|
|
|
+ http://pypi.python.org/pypi/boto
|
|
|
+
|
|
|
+.. _broker-sqs-configuration:
|
|
|
+
|
|
|
+Configuration
|
|
|
+=============
|
|
|
+
|
|
|
+You have to specify SQS in the broker URL::
|
|
|
+
|
|
|
+ BROKER_URL = 'sqs://ABCDEFGHIJKLMNOPQRST:ZYXK7NiynGlTogH8Nj+P9nlE73sq3@'
|
|
|
+
|
|
|
+where the URL format is::
|
|
|
+
|
|
|
+ sqs://aws_access_key_id@aws_secret_access_key@
|
|
|
+
|
|
|
+remember to include the "@" at the end.
|
|
|
+
|
|
|
+The login credentials can also be set using the environment variables
|
|
|
+:envvar:`AWS_ACCESS_KEY_ID` and :envvar:`AWS_SECRET_ACCESS_KEY`,
|
|
|
+in that case the broker url may only be ``sqs://``.
|
|
|
+
|
|
|
+Options
|
|
|
+=======
|
|
|
+
|
|
|
+region
|
|
|
+------
|
|
|
+
|
|
|
+The default region is ``us-east-1`` but you can select another region
|
|
|
+by configuring the :setting:`BROKER_TRANSPORT_OPTIONS` setting::
|
|
|
+
|
|
|
+ BROKER_TRANSPORT_OPTIONS = {'region': 'eu-west-1'}
|
|
|
+
|
|
|
+.. seealso::
|
|
|
+
|
|
|
+ An overview of Amazon Web Services regions can be found here:
|
|
|
+
|
|
|
+ http://aws.amazon.com/about-aws/globalinfrastructure/
|
|
|
+
|
|
|
+visibility_timeout
|
|
|
+------------------
|
|
|
+
|
|
|
+The visibility timeout defines the number of seconds to wait
|
|
|
+for the worker to acknowledge the task before the message is redelivered
|
|
|
+to another worker. Also see caveats below.
|
|
|
+
|
|
|
+This option is set via the :setting:`BROKER_TRANSPORT_OPTIONS` setting::
|
|
|
+
|
|
|
+ BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600} # 1 hour.
|
|
|
+
|
|
|
+The default visibility timeout is 120 seconds.
|
|
|
+
|
|
|
+queue_name_prefix
|
|
|
+-----------------
|
|
|
+
|
|
|
+By default Celery will not assign any prefix to the queue names,
|
|
|
+If you have other services using SQS you can configure it do so
|
|
|
+using the :setting:`BROKER_TRANSPORT_OPTIONS` setting::
|
|
|
+
|
|
|
+ BROKER_TRANSPORT_OPTIONS = {'queue_name_prefix': 'celery-'}
|
|
|
+
|
|
|
+
|
|
|
+.. _sqs-caveats:
|
|
|
+
|
|
|
+Caveats
|
|
|
+=======
|
|
|
+
|
|
|
+- If a task is not acknowledged within the ``visibility_timeout``,
|
|
|
+ the task will be redelivered to another worker and executed.
|
|
|
+
|
|
|
+ This causes problems with ETA/countdown/retry tasks where the
|
|
|
+ time to execute exceeds the visibility timeout; in fact if that
|
|
|
+ happens it will be executed again, and again in a loop.
|
|
|
+
|
|
|
+ So you have to increase the visibility timeout to match
|
|
|
+ the time of the longest ETA you are planning to use.
|
|
|
+
|
|
|
+ Note that Celery will redeliver messages at worker shutdown,
|
|
|
+ so having a long visibility timeout will only delay the redelivery
|
|
|
+ of 'lost' tasks in the event of a power failure or forcefully terminated
|
|
|
+ workers.
|
|
|
+
|
|
|
+ Periodic tasks will not be affected by the visibility timeout,
|
|
|
+ as it is a concept separate from ETA/countdown.
|
|
|
+
|
|
|
+ The maximum visibility timeout supported by AWS as of this writing
|
|
|
+ is 12 hours (43200 seconds)::
|
|
|
+
|
|
|
+ BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 43200}
|
|
|
+
|
|
|
+- SQS does not yet support worker remote control commands.
|
|
|
+
|
|
|
+- SQS does not yet support events, and so cannot be used with
|
|
|
+ :program:`celery events`, :program:`celerymon` or the Django Admin
|
|
|
+ monitor.
|
|
|
+
|
|
|
+.. _sqs-results-configuration:
|
|
|
+
|
|
|
+Results
|
|
|
+-------
|
|
|
+
|
|
|
+Multiple products in the Amazon Web Services family could be a good candidate
|
|
|
+to store or publish results with, but there is no such result backend included
|
|
|
+at this point.
|
|
|
+
|
|
|
+.. warning::
|
|
|
+
|
|
|
+ Do not use the ``amqp`` backend with SQS.
|
|
|
+
|
|
|
+ It will create one queue for every task, and the queues will
|
|
|
+ not be collected. This could cost you money that would be better
|
|
|
+ spent contributing an Amazon WS result store backend back to Celery :)
|