from moksha.hub.api 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']
The MokshaHub currently executes each consumer in their own Thread, so be sure to employ thread-safety precausions when implementing your Consumer.
If you’re using AMQP, your topic can using wildcards. http://www.rabbitmq.com/faq.html#wildcards-in-topic-exchanges
Wildcard topics do not work using STOMP.
If you’re using 0mq and zmq_strict is set to False in your config file, then your topic will behave like it usually does with 0mq. i.e.: foo will match foobar, foobaz, and `foo. If zmq_strict is set to True then foo will match only foo and not foobaz or foobar.
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.
$ workon moksha $ python setup.py egg_info $ deactivate
Moksha will now automatically detect, instantiate, and feed your consumer.