oslo RPC Client消息接口简介
admin
2023-07-31 21:20:08
0

class oslo_messaging.RPCClient(transporttargettimeout=Noneversion_cap=Noneserializer=Noneretry=None)


RPCClient是用于在远程RPC服务器上调用方法的类。


transport:RPCClient通过transport向RPC server发送远程调用并接收响应。

支持两种模式:

RPC calls:适用于期望有调用响应的场景,远程调用方法并等待响应

RPC casts:适用于不需要RPC server返回响应的场景


client:用于控制如何将RPC request传递到服务器。如果只有topic(exchange可选)被设置,RPC能够被任何监听该topic(以及exchange)的servers服务,多个servers按照round-robin的方式轮流被选中。在RPC Cast场景下,通过设置target的"fanout"属性为True,可以把request广播到所有监听的servers。


在构造过程中创建默认target后,target属性能够在单独的方法调用中使用prepare方法进行重配置。


方法调用由请求上下文字典,方法名称和参数字典组成。

使用类封装RPC Client的例子:

class TestClient(object):

    def __init__(self, transport):
        target = messaging.Target(topic='test', version='2.0')
        self._client = messaging.RPCClient(transport, target)

    def test(self, ctxt, arg):
        return self._client.call(ctxt, 'test', arg=arg)

使用prepare方式重新设置target属性的例子:

def test(self, ctxt, arg):
    cctxt = self._client.prepare(version='2.5')
    return cctxt.call(ctxt, 'test', arg=arg)

另一个例子,设置超时时间:

def test(self, ctxt, arg):
    cctxt = self._client.prepare(timeout=10)
    return cctxt.call(ctxt, 'test', arg=arg)


如果连接无法完成,client会尝试重新建立连接,默认将无限期继续直到连接完成,可以设置retry次数:

client = messaging.RPCClient(transport, target, retry=None)
client.call(ctxt, 'sync')
try:
    client.prepare(retry=0).cast(ctxt, 'ping')
except messaging.MessageDeliveryFailure:
    LOG.error("Failed to send ping message")


call(ctxtmethod**kwargs)

call方法,触发调用并等待响应。

只允许返回单个响应值,不支持调用一个fanout模式的target。

在单一线程内能够保证多个call方法按顺序处理。

方法参数必须是原始类型或者客户端序列化器支持的类型(如果有)。 类似地,请求上下文必须是字典类型,除非客户端的序列化程序支持序列化另一个类型。


can_send_version(version=)

检查版本是否与版本上限兼容。


cast(ctxtmethod**kwargs)

触发方法并且不会为返回值阻塞。

cast() RPC请求可以广播到所有相匹配的servers。

cast会阻塞直到RPC request方法被messaging transport接受,但不确认方法是否被server调用。

cast保证方法不会在一个目的地被执行两次。

cast不保证执行顺序。

类似的,请求上下文必须是字典类型,除非客户端的序列化程序支持序列化另一个类型。


prepare(exchange=, topic=, namespace=, version=, server=, fanout=, timeout=, version_cap=, retry=)

准备方法调用上下文。

使用此方法覆盖单个方法调用的客户端属性。 例如:

def test(self, ctxt, arg):
    cctxt = self.prepare(version='2.5')
    return cctxt.call(ctxt, 'test', arg=arg)


exception oslo_messaging.RemoteError(exc_type=Nonevalue=Nonetraceback=None)

表示远程端点方法引发了异常。

相关内容

热门资讯

五角大楼内部调查泄露:美军空袭... 当地时间2月28日上午11点刚过,伊朗7岁男孩马坎·纳西里的妈妈阿西耶·拉希内贾德接到一通电话。打来...
广西一动物园多只动物下落不明,... 7月7日,广西贵港一村民在村内发现一只斑马。经当地动物园确认,这是园内走失的怀孕斑马。据悉,受台风强...
中国核潜艇发射战略导弹,韩外交... 当地时间7月7日,韩国媒体韩联社援引多方消息源报道称,中方周一向太平洋试射潜射战略导弹前,已通过韩国...
创维电视啪的一声突然黑屏 1、可能是电视机外部插头突然松动,电视电源突然断开,无法供电造成黑屏。2、可能是由于电源插入大功率电...
创维电视机的二维码怎么显示出来 可以打开创维电视遥控器,里面有个智能电视,看到logo后点进去就是二维码了;还有就是把电视机的主页打...
空调E5故障代码怎么回事 原因可能是空调开启了相应的低压工作保护,要确保正常的空调工作电压范围。原因也可能是空调室内机和室外机...
美的空调出现e5是什么故障怎么... 1、一般定速挂机显示E5表示:T1传感器故障——找专业的维修人员对t1传感器进行一个维修或者是更换。...
创维电视的二维码在哪里? 创维电视的二维码在哪里?1、首先打开电视的主页,调出界面,可以看到最左边进行扫码,下载安装电视派。2...
伊朗议长:霸凌与敲诈的时代已经... 伊朗伊斯兰议会议长卡利巴夫8日在社交媒体上发文,强烈谴责美国“严重违反”伊美谅解备忘录。卡利巴夫说,...
致癌油风暴延烧,台民意机构通过... 海峡导报综合报道 台湾“中联油脂”大豆油致癌物超标,民进党当局政策反复、一度盖牌引发民怨,台民意机构...