Well I would be there with bells on, and having been fighting with rabbit the last few days I can definately say thats the best article I have found.
> > A great reference document on using RabbitMQ with python: > > http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/ > > I think the topic is cool enough that it warrants me doing a presentation > on it. > > On Thu, Jun 11, 2009 at 12:36 PM, <[email protected]> wrote: >> >> Thank you very much >> >> You are a god amoung men >> >>> >>> Sean O'Donnell asked how to get a broadcast exchange working with >>> RabbitMQ, which might be of interest to the community in general. >>> Here's how I would do it with py-amqplib with a running RabbitMQ. Now, >>> this code works on an older wersion of py-amqplib using version 0.8, >>> so if you're using the lastest version, you may have to spend some >>> time forward porting this code, but the base principles are the same. >>> >>> First of all, get a channel into amqp to create your exchange >>> >>> import amqplib.client_0_8 as amqp >>> conn = amqp.Connection(host, userid, password) >>> channel = connection.channel() >>> >>> This is where things get a bit funky. You should only worry about your >>> realm if you have a boatload of exchanges and etc. Just use the >>> default one ('/') and everything should be hunky-dory. One of the big >>> problems with py-amqplib and rabbitmq in general is that it really >>> doesn't do defaults well. Also, you have to explicitely set write to >>> False and read to True, even if they're (logically) mutually >>> exclusive, because of the way the bit protocol in amqp works. >>> >>> channel.access_request(realm, active=True, write=False, read=True) >>> channel.declare_exchange('name.of.exchange', "topic", >>> auto_delete=False, durable=True) >>> >>> Now, on your one or multiple receivers, run the following: >>> >>> [... create a channel like above right before declaring the exchange] >>> queue = channel.queue_declare(exclusive=True)[0] # exclusive means >>> nobody else can use this queue, which is good >>> channel.queue_bind(queue, 'name.of.exchange', rounting_key="#") # The >>> '#' rounting key is a catch all. Read up on rounting keys if you want >>> something more fancy >>> channel.basic_consume(queue, >>> fancy_callback_function_that_consumes_your_message) # This starts an >>> event loop that will pass every incoming message to your callback >>> function >>> >>> To send a message (or publish, in AMQP speak), run the following: >>> [ ... create your channel, much like above, but stop right before you >>> do the access request thingy] >>> channel.access_request(realm, active=True, write=True, read=False) >>> message = amqp.Message( "A string containing your message", >>> content_type="text/plain") >>> channel.basic_publish(message, exchange="name.of.exchange", >>> rounting_key="a.rounting.key") >>> >>> And, magically, everything should just work(tm) and every client >>> should receive the message you just published. There is much too much >>> boilerplate for my liking, but, trust me, py-amqplib is actually >>> hiding you away from a lot of the details of the protocol (if you can >>> believe it). I suspect more modern versions of the library make things >>> easier, but the base principles are the same: >>> >>> * 1 topic exchange >>> * bind as many queues to it, each with their own routing key >>> * send to the exchange with a routing key >>> * receive from the queues >>> >>> --Rory Geoghegan >>> >>> > >>> >> >> >> >> > >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Python Ireland" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.ie/group/pythonireland?hl=en -~----------~----~----~----~------~----~------~--~---
