zamqp is aimed to broadcast messages and trigger events between python
instances via AMQP.
It is based on amqplib and provides consumer and producer implementations as well as a mechanism to trigger zope events remotely.
Create properties for AMQP connection.
>>> from zamqp import AMQPProps >>> props = AMQPProps(host='localhost', ... user='guest', ... password='guest', ... ssl=False, ... exchange='zamqp.broadcast.fanout', ... type='fanout', ... realm='/data')
Create AMQP connection manually.
>>> from zamqp import AMQPConnection >>> connection = AMQPConnection('zamqp_queue', props)
Access connection channel.
Consumer and producer
Create consumer callback.
>>> def callback(message): ... pass # do anything with received message here
Create and start consumer thread.
>>> from zamqp import AMQPConsumer >>> from zamqp import AMQPThread >>> consumer = AMQPConsumer('zamqp_queue', props, callback) >>> thread = AMQPThread(consumer) >>> thread.start()
Create producer and send a messages. Every python object which is serializable can be used as a message.
>>> from zamqp import AMQPProducer >>> producer = AMQPProducer('zamqp_queue', props) >>> message = 'foo' >>> producer(message)
Create an event which should be triggered in the remote instance.
>>> class MyEvent(object): ... def __init__(self, name): ... self.name = name
Create a listener for
MyEvent. This gets called when AMQP events are
>>> def my_listener(event): ... if not isinstance(event, MyEvent): ... return ... # do something >>> import zope.event >>> zope.event.subscribers.append(my_listener)
AMQPEventCallback just calls
zope.event.notify with the
received payload, which is the serialized event, in this case an instance of
Start our AMQP consumer for events.
>>> exchange = 'zamqp.events.fanout' >>> queue = 'zamqp_events' >>> from zamqp import AMQPEventCallback >>> props = AMQPProps(exchange=exchange) >>> callback = AMQPEventCallback() >>> consumer = AMQPConsumer(queue, props, callback) >>> thread = AMQPThread(consumer) >>> thread.start()
MyEvent to AMQP channel. The previously started event consumer now
receives this event and triggers it locally in it's own interpreter.
>>> from zamqp import AMQPEvent >>> event = AMQPEvent(queue, props, MyEvent('myevent')) >>> zope.event.notify(event)
-Robert Niederreiter <email@example.com>
- add runner module [rnix, 2010-12-11]
- make it work [rnix]