PasteDeploy部署Pecan API 服务
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服务对象,详见下:
def app_factory(global_config, **local_conf):
return VersionSelectorApplication()
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
PasteDeploy部署Pecan API 服务的更多相关文章
- Centos7部署kubernetes API服务(四)
1.准备软件包 [root@linux-node1 bin]# pwd /usr/local/src/kubernetes/server/bin [root@linux-node1 bin]# cp ...
- .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)
本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...
- 部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用
前面介绍了很多关于ABP框架的后台Web API 服务端,以及基于Vue+Element前端应用,本篇针对两者的联合部署,以及对部署中遇到的问题进行处理.ABP框架的后端是基于.net core5.0 ...
- pecan API调用
1.在PasteDeploy部署caesar-api服务时,setup_app中建立app,app中设置hooks,hooks负责加载conf配置文件和数据库连接 self.storage_conne ...
- 使用Autofac动态注入启动Api服务
Autofac Autofac(https://autofac.org/)是一款.NET的IOC组件,它可以和Owin, Web Api, ASP.NET MVC, .NET Core完美结合,帮助开 ...
- phoenix API服务发布
概述 Elixir 的 Phoenix 框架对于开发 Web 应用非常方便,不仅有 RoR 的便利,还有 Erlang 的性能和高并发优势. 但是应用的发布涉及到 Erlang 和 Elixir 环境 ...
- .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现
前言 上篇<.net core实践系列之短信服务-架构设计>介绍了我对短信服务的架构设计,同时针对场景解析了我的设计理念.本篇继续讲解Api服务的实现过程. 源码地址:https://gi ...
- 为你的机器学习模型创建API服务
1. 什么是API 当调包侠们训练好一个模型后,下一步要做的就是与业务开发组同学们进行代码对接,以便这些‘AI大脑’们可以顺利的被使用.然而往往要面临不同编程语言的挑战,例如很常见的是调包侠们用Pyt ...
- 利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务
背景 2019第一篇文章. 此文源于前公司在迁移项目到.NET Core的过程中,希望使用Generic Host来管理定时任务程序时,没法部署到Windows服务的问题,而且官方也没给出解决方案,只 ...
随机推荐
- linux的系统调优
例1:找出前当系统中,CPU负载过高的服务器? 服务器1: load average: 0.15, 0.08, 0.01 1核 服务器2: load average: 4.15, 6.08, 6.01 ...
- The difference between Spring Tool Suite and Spring IDE
The difference between Spring Tool Suite and Spring IDE Spring Tool Suite和Spring IDE的区别: http://down ...
- linux获取内存、cpu、负载、网口流量、磁盘信息
内存信息 / meminfo 返回dict #!/usr/bin/env python def memory_stat(): mem = {} f = open("/proc ...
- python 日期创建dir
- Runloop原理
简单的说,runloop是一个事件循环的机制,同时能够保活线程.iOS中每个线程都对应一个runloop,主线程的runloop默认开启,其他线程的runloop默认关闭,线程与runloop是一一对 ...
- Kotlin语言学习笔记(2)
类(classes) // 类声明 class Invoice { } // 空的类 class Empty // 主体构造器(primary constructor) class Person co ...
- 如何遍历Set对象
对 set 的遍历 1.迭代遍历: Set<String> set = new HashSet<String>(); Iterator<String> it = s ...
- 【原】wow64 x86/x64 代码切换过程分析
下面以ntdll32!ZwQueryInformationProcess API为例分析 x86代码与x64代码之间的切换过程, 32bit的test程序: step1: ntdll32!ZwQuer ...
- linux下json工具jq
1.查看json文件 [root@VM-1-10-11 f46c19f56252a74a46fd30026001e62cc5ecadd04bc9a80c47f6fd5f9dc0586b]# pwd / ...
- C++ 自定义控件的移植(将在其它程序中设计的自定义控件,移植到现在的系统中)
方法很简单就是将需要的代码 复制到 新系统中就可以了,方法就是 把相关文件添加到现有的系统中,并特别注意以下问题 \如果原设计中用到了菜单或是其它资源,相应的资源要在新的菜单中,手动添加. 目前没有发 ...