Transport

class oslo_messaging.Transport(driver)

一个消息传输。

这主要是对底层消息传输驱动程序的不透明句柄。

RPC 和通知可能使用不同的消息系统,这些系统使用不同的驱动程序、访问权限、消息传递等。为了确保正确的消息传递功能,应使用相应的方法从用户配置中获取的传输配置(以及可选的传输 URL)构造一个 Transport 对象。

RPC Transport 对象的工厂方法

def get_rpc_transport(conf, url=None,
                      allowed_remote_exmods=None)

如果作为参数提供了传输 URL,则其中的任何传输配置都优先。如果没有提供传输 URL,但用户的配置中提供了传输 URL,则该 URL 将代替 URL 参数。

Notification Transport 对象的工厂方法

def get_notification_transport(conf, url=None,
                               allowed_remote_exmods=None)

如果未提供传输 URL,将使用配置文件中通知部分中的 URL。如果该 URL 也缺失,将使用用户默认部分中指定的相同传输。

Transport 具有一个名为 ‘conf’ 的属性,它是用于构造传输对象的 cfg.ConfigOpts 实例。

class oslo_messaging.TransportURL(conf, transport=None, virtual_host=None, hosts=None, query=None)

一个解析后的传输 URL。

传输 URL 的形式如下

driver://[user:pass@]host:port[,[userN:passN@]hostN:portN]/virtual_host?query

其中

driver

指定要使用的传输驱动程序。通常,对于 RabbitMQ 代理,这是 rabbit。有关其他可用的传输驱动程序,请参阅文档。

[user:pass@]host:port

指定代理的网络位置。userpass 是用于与代理进行身份验证的可选用户名和密码。

userpass 可以包含以下 ASCII 字符
  • 字母 (a-z 和 A-Z)

  • 数字 (0-9)

  • 特殊字符:& = $ - _ . + ! * ( )

为了与某些 SASL 实现兼容,user 可以包含最多一个 @ 字符。

userpass 中的所有其他字符必须通过 ‘%nn’ 进行编码

您可以包含用逗号分隔的多个不同的网络位置。客户端将连接到任何可用的位置,并在连接失败时自动故障转移到另一个位置。

virtual_host

指定代理内的“虚拟主机”。对虚拟主机的支持取决于所使用的消息总线。

查询

允许传递特定于驱动程序的选项,这些选项会覆盖配置文件中的相应值。

参数:
  • conf (oslo.config.cfg.ConfigOpts) – 一个 ConfigOpts 实例

  • transport (str) – 一个传输名称,例如 ‘rabbit’

  • virtual_host (str) – 一个虚拟主机路径,例如 ‘/’

  • hosts (list) – 一个 TransportHost 对象列表

  • query (dict) – 一个 URL 查询参数字典

classmethod parse(conf, url=None)

解析如 TransportURL 中定义的 URL,并返回一个 TransportURL 对象。

假设 URL 的形式如下

transport://user:pass@host:port[,userN:passN@hostN:portN]/virtual_host?query

然后解析 URL 并返回一个 TransportURL 对象。

Netloc 的解析顺序如下

  • 它首先按 ‘,’ 分割,以支持多个主机

  • 所有主机应同时指定用户名/密码或不指定。如果缺少指定,则将省略用户名和密码

    user:pass@host1:port1,host2:port2
    
    [
      {"username": "user", "password": "pass", "host": "host1:port1"},
      {"host": "host2:port2"}
    ]
    

如果未提供 url,则解析 conf.transport_url 代替。

参数:
  • conf (oslo.config.cfg.ConfigOpts) – 一个 ConfigOpts 实例

  • url (str) – 要解析的 URL

返回值:

一个 TransportURL

class oslo_messaging.TransportHost(hostname=None, port=None, username=None, password=None)

一个解析后的传输 URL 的主机元素。

oslo_messaging.set_transport_defaults(control_exchange)

设置消息传输配置选项的默认值。

参数:

control_exchange (str) – 主题作用域下的默认交换机

分叉进程和 oslo.messaging Transport 对象

oslo.messaging 无法确保分叉共享相同传输对象的进程对库使用者是安全的,因为它依赖于不同的第三方库,这些库无法确保这一点。在某些情况下,使用某些驱动程序,它可以工作

  • rabbit:只有在尚未建立任何连接的情况下才有效。