diff --git a/README.rst b/README.rst
index af1cfa5..c653a9a 100644
--- a/README.rst
+++ b/README.rst
@@ -20,7 +20,7 @@ Features
- Django Admin integration
- PaaS compatible with multiple instances
- Multi cluster monitor
-- Redis, Disque or IronMQ broker
+- Redis, Disque, IronMQ or SQS
- Python 2 and 3
Requirements
@@ -38,6 +38,7 @@ Brokers
- `Redis `__
- `Disque `__
- `IronMQ `__
+- `Amazon SQS `__
Installation
diff --git a/docs/brokers.rst b/docs/brokers.rst
index a062e06..374e2e0 100644
--- a/docs/brokers.rst
+++ b/docs/brokers.rst
@@ -2,7 +2,25 @@ Brokers
=======
The broker sits between your Django instances and your Django Q cluster instances, accepting and delivering task packages.
-Currently we support `Redis `__ , `Disque `__ and `IronMQ `__.
+Currently we support a variety of brokers from the default Redis, bleeding edge Disque to the convenient Amazon SQS.
+
+The default Redis broker does not support message receipts.
+This means that in case of a catastrophic failure of the cluster server or worker timeouts, tasks that were being executed get lost.
+Keep in mind this is not the same as a failing task. If a tasks code crashes, this should only lead to a failed task status.
+
+Even though this might be acceptable in some use cases, you might prefer brokers with message receipts support.
+These guarantee delivery by waiting for the cluster to send a receipt after the task has been processed.
+In case a receipt has not been received after a set time, the task package is put back in the queue.
+Django Q supports this behavior by setting the :ref:`retry` timer on brokers that support message receipts.
+
+Some pointers:
+
+* Don't set the :ref:`retry` timer to a lower or equal number than the task timeout.
+* Retry time includes time the task spends waiting in the clusters internal queue.
+* Don't set the :ref:`queue_limit` so high that tasks time out while waiting to be processed.
+* In case a task is worked on twice, you will see a duplicate key error in the cluster logs.
+* Duplicate tasks do generate additional receipt messages, but the result is discarded in favor of the first result.
+
Support for more brokers is being worked on.
@@ -41,6 +59,19 @@ This HTTP based queue service is both available directly via `Iron.io `__ client library: ``pip install iron-mq``
* See the :ref:`ironmq_configuration` configuration section for options.
+Amazon SQS
+----------
+Amazon's Simple Queue Service is another HTTP based message queue.
+Although `SQS `__ is not the fastest, it is stable, cheap and convenient if you already use AWS.
+
+* Delivery receipts
+* Maximum message size is 256Kb
+* Supports bulk dequeue up to 10 messages with a maximum total size of 256Kb
+* Needs Django's `Cache framework `__ configured for monitoring
+* Requires the `boto3 `__ client library: ``pip install boto3``
+* See the :ref:`sqs_configuration` configuration section for options.
+
+
Reference
---------
The :class:`Broker` class is used internally to communicate with the different types of brokers.
@@ -54,7 +85,7 @@ You can override this class if you want to contribute and support your own broke
.. py:method:: dequeue()
- Gets a task package from the broker.
+ Gets a task package from the broker and returns a tuple with a tracking id and the package.
.. py:method:: acknowledge(id)
diff --git a/docs/configure.rst b/docs/configure.rst
index d50aa66..28daf53 100644
--- a/docs/configure.rst
+++ b/docs/configure.rst
@@ -213,6 +213,34 @@ Connection settings for IronMQ::
All connection keywords are supported. See the `iron-mq `__ library for more info
+.. _sqs_configuration:
+
+sqs
+~~~
+To use Amazon SQS as a broker you need to provide the AWS region and credentials::
+
+ # example SQS broker connection
+
+ Q_CLUSTER = {
+ 'name': 'SQSExample',
+ 'workers': 4,
+ 'timeout': 60,
+ 'retry': 90,
+ 'queue_limit': 100,
+ 'bulk': 5,
+ 'sqs': {
+ 'aws_region': 'us-east-1',
+ 'aws_access_key_id': 'ac-Idr.....YwflZBaaxI',
+ 'aws_secret_access_key': '500f7b....b0f302e9'
+ }
+ }
+
+
+Please make sure these credentials have proper SQS access.
+
+Amazon SQS only supports a bulk setting between 1 and 10, with the total payload not exceeding 256kb.
+
+
bulk
~~~~
Sets the number of messages each cluster tries to get from the broker per call. Setting this on supported brokers can improve performance.
diff --git a/docs/index.rst b/docs/index.rst
index fb698c7..4fc8886 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -20,7 +20,7 @@ Features
- Django Admin integration
- PaaS compatible with multiple instances
- Multi cluster monitor
-- Redis, Disque or IronMQ broker
+- Redis, Disque, IronMQ or SQS
- Python 2 and 3
diff --git a/docs/install.rst b/docs/install.rst
index fa750be..d65f41f 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -60,8 +60,14 @@ Optional
$ pip install hiredis
-- `Redis `__ server is the default broker for Django Q. It provides the best performance and does not require Django's cache framework for monitoring.
+- `Boto3 `__ is used for the Amazon SQS broker in favor of the now deprecating boto library::
+
+ $ pip install boto3
+
+- `Iron-mq `_ is the official python binding for the IronMQ broker::
+
+ $ pip install iron-mq
+
+- `Redis `__ server is the default broker for Django Q. It provides the best performance and does not require Django's cache framework for monitoring.
- `Disque `__ server is based on Redis by the same author, but focuses on reliable queues. Currently in Alpha, but highly recommended. You can either build it from source or use it on Heroku through the `Tynd `__ beta.
-
-