title: Django + RabbitMQ + Celery all on different machines (Servers)
body: <p>I managed to get <code>Django</code> and <code>RabbitMQ</code> and <code>Celery</code> work on single machine. I have followed instructions from <a href="http://celery.readthedocs.org/en/latest/django/first-steps-with-django.html" rel="nofollow">here</a>. Now I want to make them work together but in situation when they are on different servers. I do not want <code>Django</code> knows anything about <code>Celery</code> nor <code>Celery</code> about <code>Django</code>. </p>
  
  <p>So, basically I just want in <code>Django</code> to send some message to <code>RabbitMQ</code> queue (probably id, type of task, maybe some other info), and then I want <code>RabbitMQ</code> to publish that message (when its possible) to <code>Celery</code> on another server. <code>Celery/Django</code> should not know about each other, basically I want architecture where it is easy to replace any one of them. </p>
  
  <p>Right now I have in my <code>Django</code> several calls like </p>
  
  <p><code>create_project.apply_async(args, countdown=10)</code></p>
  
  <p>I want to replace that with similar calls directly to RabbitMQ (as I said <code>Django</code> should not depend on <code>Celery</code>). Then, <code>RabbitMQ</code> should notify <code>Celery</code> (when it is possible) and <code>Celery</code> will do its job (probably interact with <code>Django</code> but through <code>REST</code> interface).</p>
  
  <p>Also, I have need to have <code>Celery</code> workers on two or more servers and I want <code>RabbitMQ</code> to notify only one of them depending on some field in message. If this is to complicated I could just check in every task (on different machines) something like: is this is something you should do (like checking ip address field in message) and if its not than just stop with execution of task.</p>
  
  <p>How can I achieve this? if possible I would prefer code + configuration examples not just theoretical explanation.</p>
  
  <p><strong>Edit:</strong></p>
  
  <blockquote>
    <p>I think that for my use case celery is total overhead. Simple RabbitMQ
    routing with custom clients will do the job. I already tried simple
    use case (one server) and it works perfectly. It should be easy to
    make communication multi-server ready. I do not like celery. It is
    "magical", hides too many details and it is not easy to configure. But I will leave this question alive, because I am interested in others opinions.</p>
  </blockquote>