ZeroMQ 上下文应该每个驱动实例创建一次

https://blueprints.launchpad.net/oslo.messaging/+spec/zmq-context-per-driver-instance

ZeroMQ 上下文对象具有单例特性,因此每个驱动创建它超过一次会造成资源浪费。

现在它是每个 socket 创建一次。

提议的变更

oslo-messaging

将 zmq 上下文的创建从 ZmqSocket 构造函数 ZmqSocket.__init__()

# oslo_messaging/_drivers/impl_zmq.py

class ZmqSocket(object):

   def __init__(self, addr, zmq_type, bind=True, subscribe=None):
      self.ctxt = zmq.Context(CONF.rpc_zmq_contexts)
      self.sock = self.ctxt.socket(zmq_type)

移动到 ZmqDriver 构造函数 ZmqDriver.__init__()

# oslo_messaging/_drivers/impl_zmq.py

class ZmqDriver(base.BaseDriver):

    def __init__(self, conf, url, default_exchange=None,
                 allowed_remote_exmods=None):
    self.ctxt = zmq.Context(CONF.rpc_zmq_contexts)

更新 ZmqSocket.__init__() 以将 zmq 上下文作为参数传递

# oslo_messaging/_drivers/impl_zmq.py

class ZmqSocket(object):
   ...
   def __init__(self, zmq_ctx, addr, zmq_type, bind=True, subscribe=None):
      self.ctxt = zmq_ctx
      self.sock = self.ctxt.socket(zmq_type)

备选方案

Impact on Existing APIs

安全影响

性能影响

Configuration Impact

开发人员影响

实现

负责人

主要负责人

Oleksii Zamiatin (ozamiatin@mirantis.com)

其他贡献者

里程碑

next-kilo

工作项

  1. 执行代码移动

  2. 更新 impl_zmq 中所有使用 socket 的地方

孵化

N/A

采用

N/A

oslo.messaging

文档影响

N/A

依赖项

参考资料