oslo.messaging example
Just a little example how to use oslo.messaging without much around it. You need to have a running rabbitmq (apt-get install rabbitmq-server on ubuntu ;)).
Add user testing to rabbitmq
# rabbitmqctl add_user testing test # rabbitmqctl set_permissions -p / testing '.*' '.*' '.*'
Setting up a virtualenv and installing oslo.messaging into it. You need to have python-dev installed.
$ virtualenv testing $ . testing/bin/activate $ pip install --upgrade pip # to be sure, pip is able to manage wheel $ pip install --upgrade setuptools # for entry point discovery $ pip install oslo.messaging
consumer part:
#!/usr/bin/env python # coding: utf-8 from oslo.config import cfg from oslo import messaging import logging import eventlet eventlet.monkey_patch() logging.basicConfig() log = logging.getLogger() log.addHandler(logging.StreamHandler()) log.setLevel(logging.INFO) class NotificationHandler(object): def info(self, ctxt, publisher_id, event_type, payload, metadata): if publisher_id == 'testing': log.info('Handled') return messaging.NotificationResult.HANDLED def warn(self, ctxt, publisher_id, event_type, payload, metadata): log.info('WARN') def error(self, ctxt, publisher_id, event_type, payload, metadata): log.info('ERROR') log.info('Configuring connection') transport_url = 'rabbit://testing:test@10.0.80.12:5672/' transport = messaging.get_transport(cfg.CONF, transport_url) targets = [messaging.Target(topic='monitor')] endpoints = [NotificationHandler()] server = messaging.get_notification_listener(transport, targets, endpoints, allow_requeue=True, executor='eventlet') log.info('Starting up server') server.start() log.info('Waiting for something') server.wait()
producer part:
#!/usr/bin/env python # coding: utf-8 from oslo.config import cfg from oslo import messaging import logging logging.basicConfig() log = logging.getLogger() log.addHandler(logging.StreamHandler()) log.setLevel(logging.INFO) transport_url = 'rabbit://testing:test@10.0.80.12:5672/' transport = messaging.get_transport(cfg.CONF, transport_url) driver = 'messaging' notifier = messaging.Notifier(transport, driver=driver, publisher_id='testing', topic='monitor') notifier.info({'some': 'context'}, 'just.testing', {'heavy': 'payload'})