diff --git a/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_base.py b/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_base.py index 80044dcff..26e0c395d 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_base.py +++ b/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_base.py @@ -34,8 +34,7 @@ class DealerPublisherBase(zmq_publisher_base.PublisherBase): def __init__(self, conf, matchmaker, sender, receiver): sockets_manager = zmq_sockets_manager.SocketsManager( - conf, matchmaker, zmq.ROUTER, zmq.DEALER) - self.socket_type = zmq.DEALER + conf, matchmaker, zmq.DEALER) super(DealerPublisherBase, self).__init__( sockets_manager, sender, receiver) diff --git a/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_direct.py b/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_direct.py index e7fdaa325..15c7b8900 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_direct.py +++ b/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_direct.py @@ -1,4 +1,4 @@ -# Copyright 2015 Mirantis, Inc. +# Copyright 2015-2016 Mirantis, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -12,7 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. - import logging from oslo_messaging._drivers.zmq_driver.client.publishers.dealer \ @@ -22,8 +21,6 @@ from oslo_messaging._drivers.zmq_driver.client import zmq_routing_table from oslo_messaging._drivers.zmq_driver.client import zmq_senders from oslo_messaging._drivers.zmq_driver import zmq_async from oslo_messaging._drivers.zmq_driver import zmq_names -from oslo_messaging._drivers.zmq_driver import zmq_socket - LOG = logging.getLogger(__name__) @@ -55,8 +52,6 @@ class DealerPublisherDirect(zmq_dealer_publisher_base.DealerPublisherBase): """ def __init__(self, conf, matchmaker): - self.routing_table = zmq_routing_table.RoutingTableAdaptor( - conf, matchmaker, zmq.ROUTER) sender = zmq_senders.RequestSenderDirect(conf) if conf.oslo_messaging_zmq.rpc_use_acks: receiver = zmq_receivers.AckAndReplyReceiverDirect(conf) @@ -65,6 +60,9 @@ class DealerPublisherDirect(zmq_dealer_publisher_base.DealerPublisherBase): super(DealerPublisherDirect, self).__init__(conf, matchmaker, sender, receiver) + self.routing_table = zmq_routing_table.RoutingTableAdaptor( + conf, matchmaker, zmq.ROUTER) + def _get_round_robin_host_connection(self, target, socket): host = self.routing_table.get_round_robin_host(target) socket.connect_to_host(host) @@ -74,8 +72,7 @@ class DealerPublisherDirect(zmq_dealer_publisher_base.DealerPublisherBase): socket.connect_to_host(host) def acquire_connection(self, request): - socket = zmq_socket.ZmqSocket(self.conf, self.context, - self.socket_type, immediate=False) + socket = self.sockets_manager.get_socket() if request.msg_type in zmq_names.DIRECT_TYPES: self._get_round_robin_host_connection(request.target, socket) elif request.msg_type in zmq_names.MULTISEND_TYPES: diff --git a/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_proxy.py b/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_proxy.py index d67d1b472..ff15dcf09 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_proxy.py +++ b/oslo_messaging/_drivers/zmq_driver/client/publishers/dealer/zmq_dealer_publisher_proxy.py @@ -1,4 +1,4 @@ -# Copyright 2015 Mirantis, Inc. +# Copyright 2015-2016 Mirantis, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -27,10 +27,8 @@ from oslo_messaging._drivers.zmq_driver.matchmaker import zmq_matchmaker_base from oslo_messaging._drivers.zmq_driver import zmq_address from oslo_messaging._drivers.zmq_driver import zmq_async from oslo_messaging._drivers.zmq_driver import zmq_names -from oslo_messaging._drivers.zmq_driver import zmq_socket from oslo_messaging._drivers.zmq_driver import zmq_updater - LOG = logging.getLogger(__name__) zmq = zmq_async.import_zmq() @@ -47,14 +45,13 @@ class DealerPublisherProxy(zmq_dealer_publisher_base.DealerPublisherBase): receiver = zmq_receivers.ReplyReceiverProxy(conf) super(DealerPublisherProxy, self).__init__(conf, matchmaker, sender, receiver) + self.socket = self.sockets_manager.get_socket_to_publishers( self._generate_identity()) - self.routing_table = zmq_routing_table.RoutingTableAdaptor( conf, matchmaker, zmq.DEALER) - - self.connection_updater = \ - PublisherConnectionUpdater(self.conf, self.matchmaker, self.socket) + self.connection_updater = PublisherConnectionUpdater( + self.conf, self.matchmaker, self.socket) def _generate_identity(self): return six.b(self.conf.oslo_messaging_zmq.rpc_zmq_host + "/" + @@ -84,50 +81,49 @@ class DealerPublisherProxy(zmq_dealer_publisher_base.DealerPublisherBase): self.sender.send(socket, request) def cleanup(self): - super(DealerPublisherProxy, self).cleanup() - self.routing_table.cleanup() self.connection_updater.stop() + self.routing_table.cleanup() self.socket.close() + super(DealerPublisherProxy, self).cleanup() class PublisherConnectionUpdater(zmq_updater.ConnectionUpdater): def _update_connection(self): publishers = self.matchmaker.get_publishers() - for pub_address, router_address in publishers: - self.socket.connect_to_host(router_address) + for pub_address, fe_router_address in publishers: + self.socket.connect_to_host(fe_router_address) class DealerPublisherProxyDynamic( zmq_dealer_publisher_base.DealerPublisherBase): def __init__(self, conf, matchmaker): + sender = zmq_senders.RequestSenderProxy(conf) + receiver = zmq_receivers.ReplyReceiverDirect(conf) + super(DealerPublisherProxyDynamic, self).__init__(conf, matchmaker, + sender, receiver) + self.publishers = set() self.updater = DynamicPublishersUpdater(conf, matchmaker, self.publishers) self.updater.update_publishers() - sender = zmq_senders.RequestSenderProxy(conf) - receiver = zmq_receivers.ReplyReceiverDirect(conf) - super(DealerPublisherProxyDynamic, self).__init__( - conf, matchmaker, sender, receiver) def acquire_connection(self, request): - socket = zmq_socket.ZmqSocket(self.conf, self.context, - self.socket_type, immediate=False) if not self.publishers: raise zmq_matchmaker_base.MatchmakerUnavailable() + socket = self.sockets_manager.get_socket() socket.connect_to_host(random.choice(tuple(self.publishers))) return socket def send_request(self, socket, request): - assert request.msg_type in zmq_names.MULTISEND_TYPES - request.routing_key = zmq_address.target_to_subscribe_filter( - request.target) + request.routing_key = \ + zmq_address.target_to_subscribe_filter(request.target) self.sender.send(socket, request) def cleanup(self): - super(DealerPublisherProxyDynamic, self).cleanup() self.updater.cleanup() + super(DealerPublisherProxyDynamic, self).cleanup() class DynamicPublishersUpdater(zmq_updater.UpdaterBase): @@ -140,5 +136,6 @@ class DynamicPublishersUpdater(zmq_updater.UpdaterBase): self.publishers = publishers def update_publishers(self): - for _, pub_frontend in self.matchmaker.get_publishers(): - self.publishers.add(pub_frontend) + publishers = self.matchmaker.get_publishers() + for pub_address, fe_router_address in publishers: + self.publishers.add(fe_router_address) diff --git a/oslo_messaging/_drivers/zmq_driver/client/publishers/zmq_publisher_base.py b/oslo_messaging/_drivers/zmq_driver/client/publishers/zmq_publisher_base.py index 838d11e2c..edfe024c6 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/publishers/zmq_publisher_base.py +++ b/oslo_messaging/_drivers/zmq_driver/client/publishers/zmq_publisher_base.py @@ -20,8 +20,8 @@ import six import oslo_messaging from oslo_messaging._drivers.zmq_driver import zmq_async - LOG = logging.getLogger(__name__) + zmq = zmq_async.import_zmq() @@ -49,7 +49,6 @@ class PublisherBase(object): :param receiver: reply receiver object :type receiver: zmq_receivers.ReplyReceiver """ - self.context = zmq.Context() self.sockets_manager = sockets_manager self.conf = sockets_manager.conf self.matchmaker = sockets_manager.matchmaker @@ -94,4 +93,3 @@ class PublisherBase(object): def cleanup(self): """Cleanup publisher. Close allocated connections.""" self.receiver.stop() - self.sockets_manager.cleanup() diff --git a/oslo_messaging/_drivers/zmq_driver/client/zmq_ack_manager.py b/oslo_messaging/_drivers/zmq_driver/client/zmq_ack_manager.py index d5b408232..1852ccd29 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/zmq_ack_manager.py +++ b/oslo_messaging/_drivers/zmq_driver/client/zmq_ack_manager.py @@ -33,15 +33,17 @@ class AckManager(zmq_publisher_manager.PublisherManagerBase): size=self.conf.oslo_messaging_zmq.rpc_thread_pool_size ) - def _wait_for_ack(self, ack_future): - request = ack_future.request + def _wait_for_ack(self, request, ack_future=None): + if ack_future is None: + ack_future = self._schedule_request_for_ack(request) + retries = \ request.retry or self.conf.oslo_messaging_zmq.rpc_retry_attempts if retries is None: retries = -1 timeout = self.conf.oslo_messaging_zmq.rpc_ack_timeout_base - done = False + done = ack_future is None while not done: try: reply_id, response = ack_future.result(timeout=timeout) @@ -72,39 +74,41 @@ class AckManager(zmq_publisher_manager.PublisherManagerBase): if request.msg_type != zmq_names.CALL_TYPE: self.receiver.untrack_request(request) - def _schedule_request_for_ack(self, request): + @zmq_publisher_manager.target_not_found_warn + def _send_request(self, request): socket = self.publisher.acquire_connection(request) self.publisher.send_request(socket, request) + return socket + + def _schedule_request_for_ack(self, request): + socket = self._send_request(request) + if socket is None: + return None self.receiver.register_socket(socket) - futures_by_type = self.receiver.track_request(request) - ack_future = futures_by_type[zmq_names.ACK_TYPE] - ack_future.request = request + ack_future = self.receiver.track_request(request)[zmq_names.ACK_TYPE] ack_future.socket = socket return ack_future - @zmq_publisher_manager.target_not_found_timeout def send_call(self, request): + ack_future = self._schedule_request_for_ack(request) + if ack_future is None: + self.publisher._raise_timeout(request) + self._pool.submit(self._wait_for_ack, request, ack_future) try: - ack_future = self._schedule_request_for_ack(request) - self._pool.submit(self._wait_for_ack, ack_future) return self.publisher.receive_reply(ack_future.socket, request) finally: if not ack_future.done(): ack_future.set_result((None, None)) - @zmq_publisher_manager.target_not_found_warn def send_cast(self, request): - ack_future = self._schedule_request_for_ack(request) - self._pool.submit(self._wait_for_ack, ack_future) + self._pool.submit(self._wait_for_ack, request) - @zmq_publisher_manager.target_not_found_warn - def _send_request(self, request): - socket = self.publisher.acquire_connection(request) - self.publisher.send_request(socket, request) + def send_fanout(self, request): + self._send_request(request) + + def send_notify(self, request): + self._send_request(request) def cleanup(self): self._pool.shutdown(wait=True) super(AckManager, self).cleanup() - - send_fanout = _send_request - send_notify = _send_request diff --git a/oslo_messaging/_drivers/zmq_driver/client/zmq_client.py b/oslo_messaging/_drivers/zmq_driver/client/zmq_client.py index 9175ad120..84ad3e786 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/zmq_client.py +++ b/oslo_messaging/_drivers/zmq_driver/client/zmq_client.py @@ -1,4 +1,4 @@ -# Copyright 2015 Mirantis, Inc. +# Copyright 2015-2016 Mirantis, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -12,7 +12,6 @@ # License for the specific language governing permissions and limitations # under the License. - from oslo_messaging._drivers import common from oslo_messaging._drivers.zmq_driver.client import zmq_client_base from oslo_messaging._drivers.zmq_driver import zmq_async @@ -69,8 +68,9 @@ class ZmqClientDirect(zmq_client_base.ZmqClientBase): super(ZmqClientDirect, self).__init__( conf, matchmaker, allowed_remote_exmods, - publishers={"default": self._create_publisher_direct( - conf, matchmaker)} + publishers={ + "default": self._create_publisher_direct(conf, matchmaker) + } ) @@ -91,6 +91,7 @@ class ZmqClientProxy(zmq_client_base.ZmqClientBase): super(ZmqClientProxy, self).__init__( conf, matchmaker, allowed_remote_exmods, - publishers={"default": self._create_publisher_proxy( - conf, matchmaker)} + publishers={ + "default": self._create_publisher_proxy(conf, matchmaker) + } ) diff --git a/oslo_messaging/_drivers/zmq_driver/client/zmq_client_base.py b/oslo_messaging/_drivers/zmq_driver/client/zmq_client_base.py index 42d8568e0..3f8a9f88b 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/zmq_client_base.py +++ b/oslo_messaging/_drivers/zmq_driver/client/zmq_client_base.py @@ -1,4 +1,4 @@ -# Copyright 2015 Mirantis, Inc. +# Copyright 2015-2016 Mirantis, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -73,8 +73,7 @@ class ZmqClientBase(object): def _create_publisher_direct(conf, matchmaker): publisher_direct = zmq_dealer_publisher_direct.DealerPublisherDirect( conf, matchmaker) - return zmq_publisher_manager.PublisherManagerDynamic( - publisher_direct) + return zmq_publisher_manager.PublisherManagerDynamic(publisher_direct) @staticmethod def _create_publisher_proxy(conf, matchmaker): @@ -86,9 +85,10 @@ class ZmqClientBase(object): @staticmethod def _create_publisher_proxy_dynamic(conf, matchmaker): - return zmq_publisher_manager.PublisherManagerDynamic( + publisher_proxy = \ zmq_dealer_publisher_proxy.DealerPublisherProxyDynamic( - conf, matchmaker)) + conf, matchmaker) + return zmq_publisher_manager.PublisherManagerDynamic(publisher_proxy) def cleanup(self): cleaned = set() diff --git a/oslo_messaging/_drivers/zmq_driver/client/zmq_publisher_manager.py b/oslo_messaging/_drivers/zmq_driver/client/zmq_publisher_manager.py index c790e138c..5abb58def 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/zmq_publisher_manager.py +++ b/oslo_messaging/_drivers/zmq_driver/client/zmq_publisher_manager.py @@ -28,16 +28,20 @@ LOG = logging.getLogger(__name__) zmq = zmq_async.import_zmq() +def _drop_message_warn(request): + LOG.warning(_LW("Matchmaker contains no records for specified " + "target %(target)s. Dropping message %(msg_id)s.") + % {"target": request.target, + "msg_id": request.message_id}) + + def target_not_found_warn(func): def _target_not_found_warn(self, request, *args, **kwargs): try: return func(self, request, *args, **kwargs) except (zmq_matchmaker_base.MatchmakerUnavailable, retrying.RetryError): - LOG.warning(_LW("Matchmaker contains no records for specified " - "target %(target)s. Dropping message %(msg_id)s.") - % {"target": request.target, - "msg_id": request.message_id}) + _drop_message_warn(request) return _target_not_found_warn @@ -47,6 +51,7 @@ def target_not_found_timeout(func): return func(self, request, *args, **kwargs) except (zmq_matchmaker_base.MatchmakerUnavailable, retrying.RetryError): + _drop_message_warn(request) self.publisher._raise_timeout(request) return _target_not_found_timeout @@ -72,31 +77,31 @@ class PublisherManagerBase(object): """Send call request :param request: request object - :type senders: zmq_request.Request + :type request: zmq_request.CallRequest """ @abc.abstractmethod def send_cast(self, request): - """Send call request + """Send cast request :param request: request object - :type senders: zmq_request.Request + :type request: zmq_request.CastRequest """ @abc.abstractmethod def send_fanout(self, request): - """Send call request + """Send fanout request :param request: request object - :type senders: zmq_request.Request + :type request: zmq_request.FanoutRequest """ @abc.abstractmethod def send_notify(self, request): - """Send call request + """Send notification request :param request: request object - :type senders: zmq_request.Request + :type request: zmq_request.NotificationRequest """ def cleanup(self): @@ -107,8 +112,8 @@ class PublisherManagerDynamic(PublisherManagerBase): @target_not_found_timeout def send_call(self, request): - with contextlib.closing( - self.publisher.acquire_connection(request)) as socket: + with contextlib.closing(self.publisher.acquire_connection(request)) \ + as socket: self.publisher.send_request(socket, request) reply = self.publisher.receive_reply(socket, request) return reply diff --git a/oslo_messaging/_drivers/zmq_driver/client/zmq_routing_table.py b/oslo_messaging/_drivers/zmq_driver/client/zmq_routing_table.py index d032e4f79..42f679957 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/zmq_routing_table.py +++ b/oslo_messaging/_drivers/zmq_driver/client/zmq_routing_table.py @@ -12,12 +12,11 @@ # License for the specific language governing permissions and limitations # under the License. +import itertools import logging import threading import time -import itertools - from oslo_messaging._drivers.zmq_driver.matchmaker import zmq_matchmaker_base from oslo_messaging._drivers.zmq_driver import zmq_address from oslo_messaging._drivers.zmq_driver import zmq_async @@ -25,10 +24,10 @@ from oslo_messaging._drivers.zmq_driver import zmq_names from oslo_messaging._drivers.zmq_driver import zmq_updater from oslo_messaging._i18n import _LW -zmq = zmq_async.import_zmq() - LOG = logging.getLogger(__name__) +zmq = zmq_async.import_zmq() + class RoutingTableAdaptor(object): @@ -63,8 +62,8 @@ class RoutingTableAdaptor(object): return host def get_fanout_hosts(self, target): - target_key = zmq_address.target_to_key( - target, zmq_names.socket_type_str(self.listener_type)) + target_key = zmq_address.prefix_str( + target.topic, zmq_names.socket_type_str(self.listener_type)) LOG.debug("Processing target %s for fanout." % target_key) @@ -123,14 +122,13 @@ class RoutingTable(object): self.targets[target_key] = (hosts_updated, self._create_tm()) def get_hosts_round_robin(self, target_key): - while self._contains_hosts(target_key): + while self.contains(target_key): for host in self._get_hosts_rr(target_key): yield host def get_hosts_fanout(self, target_key): hosts, _ = self._get_hosts(target_key) - for host in hosts: - yield host + return hosts def contains(self, target_key): with self._lock: @@ -147,10 +145,6 @@ class RoutingTable(object): _, tm = self.targets.get(target_key) return tm - def _contains_hosts(self, target_key): - with self._lock: - return target_key in self.targets - def _is_target_changed(self, target_key, tm_orig): return self._get_tm(target_key) != tm_orig diff --git a/oslo_messaging/_drivers/zmq_driver/client/zmq_sockets_manager.py b/oslo_messaging/_drivers/zmq_driver/client/zmq_sockets_manager.py index 7223442ce..0cf6ec0b0 100644 --- a/oslo_messaging/_drivers/zmq_driver/client/zmq_sockets_manager.py +++ b/oslo_messaging/_drivers/zmq_driver/client/zmq_sockets_manager.py @@ -12,10 +12,7 @@ # License for the specific language governing permissions and limitations # under the License. -import time - from oslo_messaging._drivers.zmq_driver import zmq_async -from oslo_messaging._drivers.zmq_driver import zmq_names from oslo_messaging._drivers.zmq_driver import zmq_socket zmq = zmq_async.import_zmq() @@ -23,61 +20,17 @@ zmq = zmq_async.import_zmq() class SocketsManager(object): - def __init__(self, conf, matchmaker, listener_type, socket_type): + def __init__(self, conf, matchmaker, socket_type): self.conf = conf self.matchmaker = matchmaker - self.listener_type = listener_type self.socket_type = socket_type self.zmq_context = zmq.Context() - self.outbound_sockets = {} self.socket_to_publishers = None self.socket_to_routers = None - def get_hosts(self, target): - return self.matchmaker.get_hosts_retry( - target, zmq_names.socket_type_str(self.listener_type)) - - def get_hosts_fanout(self, target): - return self.matchmaker.get_hosts_fanout_retry( - target, zmq_names.socket_type_str(self.listener_type)) - - @staticmethod - def _key_from_target(target): - return target.topic if target.fanout else str(target) - - def _get_hosts_and_track(self, socket, target): - self._get_hosts_and_connect(socket, target) - self._track_socket(socket, target) - - def _get_hosts_and_connect(self, socket, target): - get_hosts = self.get_hosts_fanout if target.fanout else self.get_hosts - hosts = get_hosts(target) - self._connect_to_hosts(socket, hosts) - - def _track_socket(self, socket, target): - key = self._key_from_target(target) - self.outbound_sockets[key] = (socket, time.time()) - - def _connect_to_hosts(self, socket, hosts): - for host in hosts: - socket.connect_to_host(host) - - def _check_for_new_hosts(self, target): - key = self._key_from_target(target) - socket, tm = self.outbound_sockets[key] - if 0 <= self.conf.oslo_messaging_zmq.zmq_target_expire \ - <= time.time() - tm: - self._get_hosts_and_track(socket, target) - return socket - - def get_socket(self, target): - key = self._key_from_target(target) - if key in self.outbound_sockets: - socket = self._check_for_new_hosts(target) - else: - socket = zmq_socket.ZmqSocket(self.conf, self.zmq_context, - self.socket_type, immediate=False) - self._get_hosts_and_track(socket, target) + def get_socket(self): + socket = zmq_socket.ZmqSocket(self.conf, self.zmq_context, + self.socket_type, immediate=False) return socket def get_socket_to_publishers(self, identity=None): @@ -88,8 +41,8 @@ class SocketsManager(object): immediate=self.conf.oslo_messaging_zmq.zmq_immediate, identity=identity) publishers = self.matchmaker.get_publishers() - for pub_address, router_address in publishers: - self.socket_to_publishers.connect_to_host(router_address) + for pub_address, fe_router_address in publishers: + self.socket_to_publishers.connect_to_host(fe_router_address) return self.socket_to_publishers def get_socket_to_routers(self, identity=None): @@ -100,10 +53,6 @@ class SocketsManager(object): immediate=self.conf.oslo_messaging_zmq.zmq_immediate, identity=identity) routers = self.matchmaker.get_routers() - for router_address in routers: - self.socket_to_routers.connect_to_host(router_address) + for be_router_address in routers: + self.socket_to_routers.connect_to_host(be_router_address) return self.socket_to_routers - - def cleanup(self): - for socket, tm in self.outbound_sockets.values(): - socket.close() diff --git a/oslo_messaging/_drivers/zmq_driver/server/consumers/zmq_dealer_consumer.py b/oslo_messaging/_drivers/zmq_driver/server/consumers/zmq_dealer_consumer.py index 437e891f4..efe2d5c29 100644 --- a/oslo_messaging/_drivers/zmq_driver/server/consumers/zmq_dealer_consumer.py +++ b/oslo_messaging/_drivers/zmq_driver/server/consumers/zmq_dealer_consumer.py @@ -41,7 +41,7 @@ class DealerConsumer(zmq_consumer_base.SingleSocketConsumer): def __init__(self, conf, poller, server): self.reply_sender = zmq_senders.ReplySenderProxy(conf) self.sockets_manager = zmq_sockets_manager.SocketsManager( - conf, server.matchmaker, zmq.ROUTER, zmq.DEALER) + conf, server.matchmaker, zmq.DEALER) self.host = None super(DealerConsumer, self).__init__(conf, poller, server, zmq.DEALER) self.connection_updater = ConsumerConnectionUpdater(