def test_run_queue_args(self): mock_logger = self._setup_mock_logger() self.mox.StubOutWithMock(mock_logger, 'info') mock_logger.info("east_coast.prod.global: nova 10.0.0.1 5672 rabbit /") self.mox.StubOutWithMock(mock_logger, 'debug') mock_logger.debug("Processing on 'east_coast.prod.global nova'") mock_logger.debug("Completed processing on " "'east_coast.prod.global nova'") mock_logger.info("Worker exiting.") config = { 'name': 'east_coast.prod.global', 'durable_queue': False, 'rabbit_host': '10.0.0.1', 'rabbit_port': 5672, 'rabbit_userid': 'rabbit', 'rabbit_password': '******', 'rabbit_virtual_host': '/', 'queue_arguments': { 'x-ha-policy': 'all' }, 'queue_name_prefix': "test_name_", "services": ["nova"], "topics": { "nova": self._test_topics() } } self.mox.StubOutWithMock(db, 'get_deployment') deployment = self.mox.CreateMockAnything() deployment.id = 1 db.get_deployment(deployment.id).AndReturn(deployment) self.mox.StubOutWithMock(kombu.connection, 'BrokerConnection') params = dict(hostname=config['rabbit_host'], port=config['rabbit_port'], userid=config['rabbit_userid'], password=config['rabbit_password'], transport="librabbitmq", virtual_host=config['rabbit_virtual_host']) self.mox.StubOutWithMock(worker, "continue_running") worker.continue_running().AndReturn(True) conn = self.mox.CreateMockAnything() kombu.connection.BrokerConnection(**params).AndReturn(conn) conn.__enter__().AndReturn(conn) conn.__exit__(None, None, None).AndReturn(None) self.mox.StubOutClassWithMocks(worker, 'Consumer') exchange = 'nova' consumer = worker.Consumer(config['name'], conn, deployment, config['durable_queue'], config['queue_arguments'], exchange, self._test_topics()) consumer.run() worker.continue_running().AndReturn(False) self.mox.ReplayAll() worker.run(config, deployment.id, exchange) self.mox.VerifyAll()
def run(deployment_config, deployment_id, exchange, stats=None): name = deployment_config['name'] host = deployment_config.get('rabbit_host', 'localhost') port = deployment_config.get('rabbit_port', 5672) user_id = deployment_config.get('rabbit_userid', 'rabbit') password = deployment_config.get('rabbit_password', 'rabbit') virtual_host = deployment_config.get('rabbit_virtual_host', '/') durable = deployment_config.get('durable_queue', True) queue_arguments = deployment_config.get('queue_arguments', {}) exit_on_exception = deployment_config.get('exit_on_exception', False) topics = deployment_config.get('topics', {}) logger = _get_child_logger() deployment = db.get_deployment(deployment_id) print "Starting worker for '%s %s'" % (name, exchange) logger.info("%s: %s %s %s %s %s" % (name, exchange, host, port, user_id, virtual_host)) params = dict(hostname=host, port=port, userid=user_id, password=password, transport="librabbitmq", virtual_host=virtual_host) # continue_running() is used for testing while continue_running(): try: logger.debug("Processing on '%s %s'" % (name, exchange)) with kombu.connection.BrokerConnection(**params) as conn: try: consumer = Consumer(name, conn, deployment, durable, queue_arguments, exchange, topics[exchange], stats=stats) consumer.run() except Exception as e: logger.error("!!!!Exception!!!!") logger.exception("name=%s, exchange=%s, exception=%s. " "Reconnecting in 5s" % (name, exchange, e)) exit_or_sleep(exit_on_exception) logger.debug("Completed processing on '%s %s'" % (name, exchange)) except Exception: logger.error("!!!!Exception!!!!") e = sys.exc_info()[0] msg = "Uncaught exception: deployment=%s, exchange=%s, " \ "exception=%s. Retrying in 5s" logger.exception(msg % (name, exchange, e)) exit_or_sleep(exit_on_exception) logger.info("Worker exiting.")