|  | @@ -97,6 +97,78 @@ same worker when it has been restarted), so to properly purge the queue of
 | 
	
		
			
				|  |  |  waiting tasks you have to stop all the workers, and then discard the tasks
 | 
	
		
			
				|  |  |  using ``discard_all``.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +Can I use celery with ActiveMQ/Stomp?
 | 
	
		
			
				|  |  | +----------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +**Answer**: Yes. But this is very experimental for now.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +First you have to use the ``master`` branch of ``celery``::
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $ git clone git://github.com/ask/celery.git
 | 
	
		
			
				|  |  | +    $ cd celery
 | 
	
		
			
				|  |  | +    $ sudo python setup.py install
 | 
	
		
			
				|  |  | +    $ cd ..
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Then you need to install the ``stompbackend`` branch of ``carrot``:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $ git clone git://github.com/ask/carrot.git
 | 
	
		
			
				|  |  | +    $ cd carrot
 | 
	
		
			
				|  |  | +    $ git checkout stompbackend
 | 
	
		
			
				|  |  | +    $ sudo python setup.py install
 | 
	
		
			
				|  |  | +    $ cd ..
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +And my fork of ``python-stomp`` which adds non-blocking support::
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $ hg clone http://bitbucket.org/asksol/python-stomp/
 | 
	
		
			
				|  |  | +    $ cd python-stomp
 | 
	
		
			
				|  |  | +    $ sudo python setup.py install
 | 
	
		
			
				|  |  | +    $ cd ..
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +In this example we will use a queue called ``celery`` which we created in
 | 
	
		
			
				|  |  | +the ActiveMQ web admin interface.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +**Note**: For ActiveMQ the queue name has to have ``"/queue/"`` prepended to
 | 
	
		
			
				|  |  | +it. i.e. the queue ``celery`` becomes ``/queue/celery``.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Since a STOMP queue is a single named entity and it doesn't have the
 | 
	
		
			
				|  |  | +routing capabilities of AMQP you need to set both the ``queue``, and
 | 
	
		
			
				|  |  | +``exchange`` settings to your queue name. This is a minor inconvenience since
 | 
	
		
			
				|  |  | +carrot needs to maintain the same interface for both AMQP and STOMP (obviously
 | 
	
		
			
				|  |  | +the one with the most capabilities won).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Use the following specific settings in your ``settings.py``:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.. code-block:: python
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Makes python-stomp the default backend for carrot.
 | 
	
		
			
				|  |  | +    CARROT_BACKEND = "pystomp"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # STOMP hostname and port settings.
 | 
	
		
			
				|  |  | +    AMQP_HOST = "localhost"
 | 
	
		
			
				|  |  | +    AMQP_PORT = 61613
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # The queue name to use (both queue and exchange must be set to the
 | 
	
		
			
				|  |  | +    # same queue name when using STOMP!!!)
 | 
	
		
			
				|  |  | +    CELERY_AMQP_CONSUMER_QUEUE = "/queue/celery"
 | 
	
		
			
				|  |  | +    CELERY_AMQP_EXCHANGE = "/queue/celery" 
 | 
	
		
			
				|  |  | +   
 | 
	
		
			
				|  |  | +Now you can go on reading the tutorial in the README, ignoring any AMQP
 | 
	
		
			
				|  |  | +specific options. 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Which features are not supported when using STOMP?
 | 
	
		
			
				|  |  | +--------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +This is a (possible incomplete) list of features not available when
 | 
	
		
			
				|  |  | +using the STOMP backend:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    * routing keys
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    * exchange types (direct, topic, headers, etc)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    * immediate
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    * mandatory
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  Can I send some tasks to only some servers?
 | 
	
		
			
				|  |  |  --------------------------------------------
 | 
	
		
			
				|  |  |  
 |