IT虾米网

Extension Service的WSGI Application

sanshao 2022年06月12日 大数据 171 0
Extension Service的WSGI Application与Core Service的相比,有几个不同点。
1 加载所有的Extension Service(因为Extension Service是多个,而不是1个)。
2 为每一个Extension Service构建映射规则:Extension Service API(RESTful)与处理函数之间的映射规则。
3 因为Extension Service的WSGI Application属于filter app性质,所以如果一个HTTP Request不属于所有这些Extension Service的管理范围,那么这个Application还需要将请求转给Core Service的WSGI Application。
下面来介绍Extension Service的WSGI Application。
在etc/api-paste.ini中,有如下配置信息:
#“filter”表明这个section定义的WSGI Application是一个filter app 
[filter:extensions] 
#这里定义了一个WSGI Application的factory 
paste.filter_factory = neutron.api.extensions:plugin_aware_extension_middleware_factory
这个factory的代码如下:
def plugin_aware_extension_middleware_factory(global_config, **local_config): 
    #_factory是一个内嵌函数,参数app就是Core Service的WSGI Application实例,也就是class APIRouter的实例对象 
    def _factory(app): 
        ext_mgr = PluginAwareExtensionManager.get_instance() 
        return ExtensionMiddleware(app, ext_mgr=ext_mgr) 
return _factory
这个factory返回的ExtensionMiddleware实例,就是Extension Service的WSGI Application
代码中的app是APIRouter的实例对象,参考下面代码:
def pipeline_factory(loader, global_conf, **local_conf): 
    #这里的app就是Core Service的WSGI Application,也就是class APIrouter的实例对象 
    app = loader.get_app(pipeline[-1]) 
    filters.reverse() 
        #这个循环中,第一个filter就是Extension Service的WSGI Application的工厂函数,也就是***_factory(app)函数 
        #这里的app就是class APIrouter的实例对象 
    for filter in filters: 
        app = filter(app) 
return app



评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Extension Service处理HTTP Request的基本流程