WSGI微服务中间件

wsgi-microservice-middleware的Python项目详细描述


WSGI微服务中间件

这个小小的库包含中间软件,帮助快速将wsgi应用程序(例如flask、django、bottle、tornado、pyramid)转化为可生产的微服务,以便集成到kubernetes集群中。这些中间件设置为可配置的warfrom环境变量,符合十二因素应用程序方法。在

此软件包中的中间件包括:

这个项目脱离了预分析的开发,作为在wsgi支持的框架上构建的各种微环境中快速移植代码的方法。在

View on Github

安装

这个项目需要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打开问题。或者更好的办法是,你可以分拆回购,我们会合并你的改进。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Android应用程序中处理新活动时出现java NullPointerException   从PSV文件读取Java   在JavaSwing中将方法从一个类传递到另一个类   带有MongoDB错误的java Vertx ClassNotFoundException:com。mongodb。联系溪流工厂   在java中替换2D数组中的数字?   java Avro方案空布尔和双整数布尔的写并集   java导入组织。neo4j无法解决?   从另一个获取变量。使用反射的java文件   Java:以格式化字符串的形式返回具有非常不同的条目长度的2D数组   java客户端应用程序正在从IBMMQ接收不同格式的消息体   java在我的主循环中的步骤有问题   java如何正确安装来自sslforfree的证书。tomcat服务器上的com   java RecyclerView变更单永久   java如何获得屏幕的精确中间位置,即使调整了大小