Пример #1
0
    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()
Пример #2
0
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.")