美文网首页
OpenStack RPC Client

OpenStack RPC Client

作者: 大老三 | 来源:发表于2019-01-25 14:51 被阅读17次

    rpc call

    调用方法并等待返回。

    call()方法是用来调用有返回值的RPC方法。由于只允许有一个返回值,所以不允许对fanout类型的target调用call方法。

    call方法会阻塞调用线程,直到消息队列提供了返回值,超时,或不可恢复的错误。

    call保证RPC请求最多执行一次,保证了不会有重复调用。但是如果在返回值到达之前调用失败或超时,则无法保证是否调用了该方法。

    由于call()会阻塞到RPC方法完成,因此可保证来自同一线程的多个RPC调用按顺序处理。

    方法参数必须是原始类型或客户端序列化程序支持的类型(如果有)。 同样,request context必须是dict,除非客户端的序列化程序支持序列化另一种类型。

    如何处理远端RPC方法引发的任何错误的语义是非常微妙的。首先,如果远端异常包含在allow_remote_exmods messaging.get_rpc_transport()参数中列出的其中一个模块中,那么将通过call()重新引发此异常。 但是,此类本地重新引发的远程异常可与本地引发的相同异常类型区分开,因为重新引发的远程异常被修改,以使其类名以“_Remote”后缀结尾,因此可以执行以下操作:

    if ex.__class__.__name__.endswith('_Remote'):
        # Some special case for locally re-raised remote exceptions
    

    其次,如果远程异常不是来自allowed_remote_exmods列表中列出的模块,则会引发messaging.RemoteError异常,其中包含远程异常的所有详细信息。

    Parameters: 
    ctxt (dict) – a request context dict
    method (str) – the method name
    kwargs (dict) – a dict of method arguments
    Raises: 
    MessagingTimeout, RemoteError, MessageDeliveryFailure
    

    rpc cast

    调用方法,不会因等待返回值而阻塞当前逻辑。
    cast()方法用于调用没有返回值的RPC方法。通过将fanout target属性设置为True,可以向所有侦听给定topic的服务器广播RPC请求。

    尽管cast()操作是尽力而为:cast()将阻塞调用线程,直到消息队列接受RPC的调用方法,但cast()不验证对端服务器是否已调用RPC方法。 cast()确保该方法不会在目标上执行两次(例如,“最多一次”执行)。
    连续的cast请求没有顺序保证,即使cast是同一目的地。因此,方法会以与它们被触发的顺序不同的顺序执行。
    cast请求
    方法参数必须是原始类型或客户端序列化程序支持的类型(如果有)。 同样,request context必须是dict,除非客户端的序列化程序支持序列化另一种类型。

    Parameters: 
    ctxt (dict) – a request context dict
    method (str) – the method name
    kwargs (dict) – a dict of method arguments
    Raises: 
    MessageDeliveryFailure if the messaging transport fails to accept the request.
    

    prepare

    准备方法调用context
    使用此方法重写客户端属性

    参考链接

    https://docs.openstack.org/oslo.messaging/latest/reference/rpcclient.html

    相关文章

      网友评论

          本文标题:OpenStack RPC Client

          本文链接:https://www.haomeiwen.com/subject/dawmjqtx.html