| 
					
				 | 
			
			
				@@ -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 :) 
			 |