def __init__(self, conf): super(KombuRPCServer, self).__init__(conf) CONF.register_opts(_pool_opts) kombu_base.set_transport_options() self._register_mistral_serialization() self.topic = conf.topic self.server_id = conf.host self._hosts = kombu_hosts.KombuHosts(CONF) self._executor_threads = CONF.executor_thread_pool_size self.exchange = CONF.control_exchange # TODO(rakhmerov): We shouldn't rely on any properties related # to oslo.messaging. Only "transport_url" should matter. self.durable_queue = CONF.oslo_messaging_rabbit.amqp_durable_queues self.auto_delete = CONF.oslo_messaging_rabbit.amqp_auto_delete self.routing_key = self.topic self.channel = None self.conn = None self._running = threading.Event() self._stopped = threading.Event() self.endpoints = [] self._worker = None self._thread = None # TODO(ddeja): Those 2 options should be gathered from config. self._sleep_time = 1 self._max_sleep_time = 10
def test_transport_url_multiple_hosts(self): self.override_config( 'transport_url', 'rabbit://{user_1}:{password_1}@{host_1}:{port_1},' '{user_2}:{password_2}@{host_2}:{port_2}/{virtual_host}'.format( user_1=USER_1, password_1=PASSWORD_1, port_1=PORT_1, host_1=HOST_1, user_2=USER_2, password_2=PASSWORD_2, host_2=HOST_2, port_2=PORT_2, virtual_host=VIRTUAL_HOST_1)) hosts = kombu_hosts.KombuHosts(cfg.CONF) self.assertEqual(VIRTUAL_HOST_1, hosts.virtual_host) self.assert_transports_host([ oslo_messaging.TransportHost( hostname=HOST_1, port=PORT_1, username=USER_1, password=PASSWORD_1, ), oslo_messaging.TransportHost( hostname=HOST_2, port=PORT_2, username=USER_2, password=PASSWORD_2, ) ], hosts.hosts)
def test_prefer_transport_url(self): self.override_config('rabbit_userid', USER_1, 'oslo_messaging_rabbit') self.override_config('rabbit_password', PASSWORD_1, 'oslo_messaging_rabbit') self.override_config('rabbit_virtual_host', VIRTUAL_HOST_1, 'oslo_messaging_rabbit') self.override_config('rabbit_host', HOST_1, 'oslo_messaging_rabbit') self.override_config('rabbit_port', PORT_1, 'oslo_messaging_rabbit') self.override_config( 'transport_url', 'rabbit://{user}:{password}@{host}:{port}/{virtual_host}'.format( user=USER_2, port=PORT_2, host=HOST_2, password=PASSWORD_2, virtual_host=VIRTUAL_HOST_2)) hosts = kombu_hosts.KombuHosts(cfg.CONF) self.assertEqual(VIRTUAL_HOST_2, hosts.virtual_host) self.assert_transports_host([ oslo_messaging.TransportHost( hostname=HOST_2, port=PORT_2, username=USER_2, password=PASSWORD_2, ) ], hosts.hosts)
def test_oslo_messaging_rabbit_multiple_hosts(self): self.override_config('rabbit_userid', USER_1, 'oslo_messaging_rabbit') self.override_config('rabbit_password', PASSWORD_1, 'oslo_messaging_rabbit') self.override_config('rabbit_virtual_host', VIRTUAL_HOST_1, 'oslo_messaging_rabbit') self.override_config( 'rabbit_hosts', '{host_1}:{port_1},{host_2}:{port_2}'.format(host_1=HOST_1, port_1=PORT_1, host_2=HOST_2, port_2=PORT_2), 'oslo_messaging_rabbit') self.override_config('rabbit_port', PORT_1, 'oslo_messaging_rabbit') hosts = kombu_hosts.KombuHosts(cfg.CONF) self.assertEqual(VIRTUAL_HOST_1, hosts.virtual_host) self.assert_transports_host([ oslo_messaging.TransportHost( hostname=HOST_1, port=PORT_1, username=USER_1, password=PASSWORD_1, ), oslo_messaging.TransportHost( hostname=HOST_2, port=PORT_2, username=USER_1, password=PASSWORD_1, ) ], hosts.hosts)
def __init__(self, conf): super(KombuRPCClient, self).__init__(conf) kombu_base.set_transport_options() self._register_mistral_serialization() self.topic = conf.topic self.server_id = conf.host self._hosts = kombu_hosts.KombuHosts(CONF) self.exchange = CONF.control_exchange self.virtual_host = CONF.oslo_messaging_rabbit.rabbit_virtual_host self.durable_queue = CONF.oslo_messaging_rabbit.amqp_durable_queues self.auto_delete = CONF.oslo_messaging_rabbit.amqp_auto_delete self._timeout = CONF.rpc_response_timeout self.routing_key = self.topic hosts = self._hosts.get_hosts() connections = [] for host in hosts: conn = self._make_connection( host.hostname, host.port, host.username, host.password, self.virtual_host ) connections.append(conn) self._connections = itertools.cycle(connections) # Create exchange. exchange = self._make_exchange( self.exchange, durable=self.durable_queue, auto_delete=self.auto_delete ) # Create queue. self.queue_name = utils.generate_unicode_uuid() self.callback_queue = kombu.Queue( self.queue_name, exchange=exchange, routing_key=self.queue_name, durable=False, exclusive=True, auto_delete=True ) self._listener = kombu_listener.KombuRPCListener( connections=self._connections, callback_queue=self.callback_queue ) self._listener.start()
def test_oslo_messaging_rabbit(self): self.override_config('rabbit_userid', USER_1, 'oslo_messaging_rabbit') self.override_config('rabbit_password', PASSWORD_1, 'oslo_messaging_rabbit') self.override_config('rabbit_virtual_host', VIRTUAL_HOST_1, 'oslo_messaging_rabbit') self.override_config('rabbit_host', HOST_1, 'oslo_messaging_rabbit') self.override_config('rabbit_port', PORT_1, 'oslo_messaging_rabbit') hosts = kombu_hosts.KombuHosts(cfg.CONF) self.assertEqual(VIRTUAL_HOST_1, hosts.virtual_host) self.assert_transports_host([ oslo_messaging.TransportHost( hostname=HOST_1, port=PORT_1, username=USER_1, password=PASSWORD_1, ) ], hosts.hosts)