title: Differentiate celery, kombu, PyAMQP and RabbitMQ/ironMQ
body: <p>I want to upload images to S3 server, but before uploading I want to generate thumbnails of 3 different sizes, and I want it to be done out of request/response cycle hence I am using celery. I have read the docs, here is what I have understood. Please correct me if I am wrong.</p>
  
  <ol>
  <li>Celery helps you manage your task queues outside the request response cycle.</li>
  <li>Then there is something called carrot/kombu -  its a django middleware that packages tasks that get created via celery.</li>
  <li>Then the third layer PyAMQP that facilitates the communication of carrot to a broker. eg. RabbitMQ, AmazonSQS, ironMQ etc.</li>
  <li>Broker sits on a different server and does stuff for you.</li>
  </ol>
  
  <p>Now my understanding is - if multiple users upload image at the same time, celery will queue the resizing, and the resizing will actually happen at the ironMQ server, since it offers a cool addon on heroku.</p>
  
  <p>Now the doubts:</p>
  
  <ol>
  <li><p>But what after the image is resized, will ironMQ push it to the S3 server, or will it notify once the process is completed.. i am not clear about it.</p></li>
  <li><p>What is the difference between celery and kombu/carrot, could you explain vividly. </p></li>
  </ol>