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
-~----------~----~----~----~------~----~------~--~---

Reply via email to