WSGI微服务中间件
wsgi-microservice-middleware的Python项目详细描述
WSGI微服务中间件
这个小小的库包含中间软件,帮助快速将wsgi应用程序(例如flask、django、bottle、tornado、pyramid)转化为可生产的微服务,以便集成到kubernetes集群中。这些中间件设置为可配置的warfrom环境变量,符合十二因素应用程序方法。在
此软件包中的中间件包括:
这个项目脱离了预分析的开发,作为在wsgi支持的框架上构建的各种微环境中快速移植代码的方法。在
安装
这个项目需要python3.5+。它最好通过pip从pypi包存储库安装。在
pip install wsgi_microservice_middleware
此软件包的最新分支也可以从git安装:
^{pr2}$配置
包配置最好通过环境变量添加配置值来完成。此包使用environs包从系统环境或工作目录中的.env
文件加载以下值:
- 在
在CORS_ALLOWED
:可以从中发出CORS请求的以逗号分隔的域名字符串。默认为空 - 在
在REQUEST_ID_HEADER
:包含要包含在日志中的请求id的http请求头。如果未提供,则默认为X-Request-Id
。在 - 在
在LOG_TOKENS
:指示RequestIdMiddleware
在可用时向请求日志添加承载身份验证令牌。默认为True。在
用法
这些中间件是通过中间件类在代码中包装wsgi应用程序对象来应用的。示例如下:
- 在
烧瓶:
# app.pyfromflaskimportFlaskfromwsgi_microservice_middleware.corsimportCORSMiddlewareapp=Flask(__name__)app.wsgi_app=CORSMiddleware(app.wsgi_app)# Middleware applied hereapp.run(...)
在 - 在
Django:
# wsgi.pyfromdjango.core.wsgiimportget_wsgi_applicationfromwsgi_microservice_middleware.request_idimportRequestIdMiddlewareapplication=get_wsgi_application()application=RequestIdMiddleware(application)# Middleware applied here
在
模块
CORS
将CORS头添加到来自中的域的请求响应 CORS U允许的环境变量。允许的CORS_应作为 以逗号分隔的域名字符串。在
请求Id
对需要跨多个微服务跟踪和在日志记录中搜索的请求实现请求Id处理。
RequestIdMiddleware
类。在
要将请求Id扩展到应用程序日志,请将RequestIdFilter
合并到日志配置中。最好的办法是
使用logging.config.dictConfig
将筛选器应用于所有处理程序:
# log_config.pyfromlogging.configimportdictConfigfromwsgi_microservice_middleware.request_idimportRequestIdFilterdictConfig({'version':1,'filters':{'request_id_filter':{'()':RequestIdFilter,# RequestIdFilter.filter(self, record) called with each log entry}},'formatters':{'default':{'format':'%(asctime)s - %(threadName)s - %(name)s - %(levelname)s - %(request_id)s - %(message)s',}},'handlers':{'wsgi':{'class':'logging.StreamHandler','formatter':'default','filters':['request_id_filter']# add this filter to each handler},},'root':{'level':'DEBUG','handlers':['wsgi']}})
如果您的微服务向其他微服务发出请求,您可以调用current_request_id()
方法来获取当前的请求id并将其合并到您的请求头中。在
贡献
我们希望你的帮助!在github repo打开问题。或者更好的办法是,你可以分拆回购,我们会合并你的改进。在
- 项目
标签: