openstack nova 基础知识——rpc回调机制(callback)

前几篇已经知道了nova中消息是怎么发送和接收的了,但是不太明白消息被接收之后,是怎么处理的,看代码中消息接收那块传递的参数不是proxy就是callback,或者是callbacks,这个回调方法到底调用的是哪的方法呢?

从一个服务的启动程序上看,有这样一段代码:

rpc_dispatcher = self.manager.create_rpc_dispatcher()

self.conn.create_consumer(self.topic, rpc_dispatcher, fanout=False)

一个manager创建了一个dispatcher,然后用这个dispatcher创建了一个consumer,这个rpc_dispatcher就是callback,就是Consumer接收到消息之后,调用方法所使用的类。

发送消息时,其实消息的内容就是一个方法名和方法所需要的参数,这两者组成一个字典:

@staticmethod
def make_msg(method, **kwargs):
    return {'method': method, 'args': kwargs}
rpc_dispatcher相当于manager的一个代理类,其中有一个dispatch()方法,就是用来执行它所代理的manager中的方法的,这个方法就是由接收到的msg(消息)来指定的。manager中定义了对某一个服务相关的管理工作,所以可以通过消息来指定要调用哪个方法进行相关的管理,比如说创建一个实例,就调用manager中的run_instance()方法。

来看一下整体的类图:


还有一个ProxyCallback类,这个是Consumer直接使用的类,是对RpcDispatcher进行了一下封装,主要是将回调的方法放到绿色线程中执行,总的来说,Consumer执行的回调方法是来自相关的Manager,并且在绿色线程中执行。




评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

hackerain

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值