class RpcClient(object): def __init__(self): self.response = None self.connection = Connection() self.channel = Channel(self.connection) (self.queue, _, _) = self.channel.queue_declare(exclusive=True) self.channel.queue_bind(self.queue, exchange='django_amqp_example') def request(self, body): message = Message( body=json.dumps(body), reply_to=self.queue, content_type='application/json') self.channel.basic_publish( message, exchange='django_amqp_example', routing_key='task_queue') print "Task submitted:", json.dumps(body) def callback(msg): self.response = json.loads(msg.body) self.channel.basic_consume( callback=callback, queue=self.queue, no_ack=True) while True: self.connection.drain_events(timeout=60) if self.response is not None: break self.connection.close() return self.response
import json connection = Connection() channel = Channel(connection) channel.exchange_declare('django_amqp_example', 'topic', auto_delete=False) channel.queue_declare(queue='task_queue', durable=True) channel.queue_bind('task_queue', 'django_amqp_example', 'task_queue') def callback(msg): print "Received request:", msg.body content = json.loads(msg.body)['content'] response = { 'rot13': content.encode('rot13') } response_msg = Message( body=json.dumps(response), exchange='django_amqp_example') print "Sending response:", json.dumps(response) channel.basic_publish( response_msg, routing_key=msg.reply_to) channel.basic_consume(callback=callback, queue='task_queue') print "Worker is waiting for requests" while True: connection.drain_events()