Extension Service的WSGI Application

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


猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/80696888