part 1:请求处理
使用PasteDeploy模块来实现 WSGI Services 时,都需要加载一个 paste.ini 文件,文件用来定义服务过滤和请求路由,类似于springMvc的拦截器。pecan是一个对象路由框架,这里的请求路由是版本v1或者v2对应的不同处理。在api_paste.ini文件中定义如下:
[pipeline:main] pipeline = request_id api-server [app:api-server] paste.app_factory = caesarlinsa.api.app:app_factory [filter:request_id] paste.filter_factory = oslo_middleware:RequestId.factory
pipeline中定义请求顺序,请求先通过request_id这个拦截器,然后再到api-server这个服务。【app: api-server】定义web服务名api-server
paste.app_factory = caesarlinsa.api.app:app_factory 服务的入口方法caesarlinsa.api.app中的def app_factory()返回application服务对象,详见下:
1 2 | def app_factory(global_config, * * local_conf): return VersionSelectorApplication() |
1 | VersionSelectorApplication类的定义如下,用于对不同版本路径处理,如果是v1返回 404 Not Found。 |
class VersionSelectorApplication(object): def __init__(self): pc = get_pecan_config() def not_found(environ, start_response): start_response('404 Not Found', []) return [] self.v1 = not_found self.v2 = setup_app(pecan_config=pc)# load_app()加载配置文件api_paste.ini创建application服务 def __call__(self, environ, start_response): if environ['PATH_INFO'].startswith('/v1/'): return self.v1(environ, start_response) return self.v2(environ, start_response)
使用pecan创建application使用方法pecan.make_app,VersionSelectorApplication是对pecan返回的application的封装,self.v2(environ,start_response)
part2: 开启服务
def build_server(): app = load_app() # Create the WSGI server and start it host, port = cfg.CONF.api.host, cfg.CONF.api.port LOG.info('Starting server in PID %s' % os.getpid()) LOG.info("Configuration:") cfg.CONF.log_opt_values(LOG, logging.INFO) if host == '0.0.0.0': LOG.info( 'serving on 0.0.0.0:%s, view at http://127.0.0.1:%s' % (port, port)) else: LOG.info("serving on http://%s:%s" % (host, port)) serving.run_simple(cfg.CONF.api.host, cfg.CONF.api.port, app, processes=CONF.api.workers)
建立服务web服务器,等待请求
以上只是个人感悟,具体可参考我的github: https://github.com/CaesarLinsa/ceilometer_TestCase
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法