https://github.com/bluedynamics/zamqp
AMQP broadcasting for python and zope.
https://github.com/bluedynamics/zamqp
Last synced: about 1 year ago
JSON representation
AMQP broadcasting for python and zope.
- Host: GitHub
- URL: https://github.com/bluedynamics/zamqp
- Owner: bluedynamics
- License: other
- Created: 2010-12-11T10:32:38.000Z (over 15 years ago)
- Default Branch: master
- Last Pushed: 2011-03-15T15:10:44.000Z (about 15 years ago)
- Last Synced: 2025-02-03T18:38:38.146Z (over 1 year ago)
- Language: Python
- Homepage:
- Size: 113 KB
- Stars: 1
- Watchers: 7
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.rst
Awesome Lists containing this project
README
Overview
========
``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.
Helper Classes
--------------
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.
::
>>> 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)
Trigger events
--------------
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
received.
::
>>> def my_listener(event):
... if not isinstance(event, MyEvent):
... return
... # do something
>>> import zope.event
>>> zope.event.subscribers.append(my_listener)
The default ``AMQPEventCallback`` just calls ``zope.event.notify`` with the
received payload, which is the serialized event, in this case an instance of
``MyEvent``.
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()
Trigger ``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)
Credits
=======
-Robert Niederreiter
Changes
=======
1.0b2
-----
- add runner module [rnix, 2010-12-11]
1.0b1
-----
- make it work [rnix]