Neutron通信方式
neutron有如下通信方式:
- callback(同步调用)
- rpc(可以异步也可以同步)
- rest(同步调用)
1. callback
代码位置: neutron-lib/neutron_lib/callbacks
1.1 通信方式:
进程内的同步调用
1.2 原理
|
|
通过_get_callback_manager
初始化一个_CALLBACK_MANAGER
(这里采用了python的单例模式),
再通过registry.py
中的subscribe
、unsubscribe
、unsubscribe_by_resource
、unsubscribe_all
、notify
、publish
、clear
函数来调用具体的回调函数。
下面看各个回调函数的具体的实现
1.2.1 subscribe
订阅某个事件
|
|
总结: 这段代码主要用到了python的collections的defaultdict模块,简化了字典的操作。
1.2.2 unsubscribe
取消某个事件的订阅
|
|
1.2.3 unsubscribe_by_resource
取消某个资源的订阅
|
|
1.2.4 unsubscribe_all
取消所有订阅
|
|
1.2.5 notify
给所有的订阅发消息(根据resource和event来区分)
|
|
1.2.6 publish
发布订阅,作用和notify相同
|
|
1.2.7 clear
把订阅相关的内存清楚掉
|
|
1.3 使用举例
|
|
这样就完成了对router资源的,after_create事件的订阅,即当router的after_create事件发生,则会回调到after_router_added函数
其他事件也同理,就不举例了。
2. RPC
代码位置:oslo_messaging/rpc/client.py
neutron的RPC主要用到了oslo_messaging的功能,那么就主要讲讲oslo_messaging的rpc
据代码介绍,oslo_messaging的rpc支持两种模式,RPC calls 和 RPC casts.
-
RPC calls 需要等待被调用方返回值
-
RPC casts 不用等待被调用方返回值
先占个坑,以后再挖一下这个rpc 🤣🤣🤣
3. REST
这就不多说了,基操