Moksha provides a simple API for creating “consumers” of message topics.
This means that your consumer is instantiated when the MokshaHub is initially loaded, and receives each message for the specified topic through the Consumer.consume() method.
Module author: Luke Macken <lmacken@redhat.com>
from moksha.api.hub import Consumer
class FeedConsumer(Consumer):
# The topic to listen to.
topic = 'moksha.feeds'
# Automatically decode message as JSON, and encode when using self.send_message
jsonify = True
def consume(self, message):
print message['topic']
print message['body']
Note
The MokshaHub currently executes each consumer in their own Thread, so be sure to employ thread-safety precausions when implementing your Consumer.
Note
If your using AMQP, your topic can using wildcards. http://www.rabbitmq.com/faq.html#wildcards-in-topic-exchanges
Wildcard topics do not work using STOMP.
To “install” your consumer, you have to expose it on on the moksha.consumer entry-point. This can be done by updating your applications setup.py to make it look something like this:
entry_points="""
[moksha.consumer]
feedconsumer = myapplication.feedconsumer:FeedConsumer
"""
After modifying your entry-points, you’ll need to re-generate your project’s egg-info. The start-moksha script will do this for you.
$ python setup.py egg_info
Moksha will now automatically detect, instantiate, and feed your consumer.