brewblox后端服务的脚手架

brewblox-service的Python项目详细描述


brewblox服务应用的脚手架

为了减少服务之间的代码重复,这里实现了通用功能。

有关如何基于brewblox-service实现自己的服务的示例,请参见https://github.com/brewblox/brewblox-boilerplate

brewblox-service在技术上可以作为独立应用程序启动,但不会非常有用。

brewblox_service

这里定义了小型通用工具。

brewblox_logger可用于创建特定于模块的记录器。它不是必需的,但使用日志的默认格式会更好一些。

示例:

frombrewblox_serviceimportbrewblox_loggerLOGGER=brewblox_logger(__name__)LOGGER.info('hello')

service.py

解析命令行参数,创建一个aiohttp应用程序,并运行它。

最短的实现方式是:

app=service.create_app(default_name='my_service')service.furnish(app)service.run(app)

这将为您提供一个工作的web应用程序,但它只支持/_service/status健康检查端点。

应用程序可以配置自己的功能,并添加新的命令行参数。

示例:

# Separately creating the parser allows adding arguments to the default setparser=service.create_parser(default_name='my_service')parser.add_argument('--my-arg')# Now create the appapp=service.create_app(parser=create_parser())# Add features for this servicedevice.setup(app)api.setup(app)# Furnish and runservice.furnish(app)service.run(app)

features.py

许多服务特性都是应用程序范围内的。它们的生命周期应该跨越多个请求,要么是因为它们不是请求驱动的,要么是因为它们管理异步I/O操作(比如监听AMQP消息)。

ServiceFeature类为这种行为提供了一个抽象基类。实现类应该定义startup(app)shutdown(app)函数,这些函数将在应用程序启动和关闭时自动调用。

在异步上下文中调用startup()shutdown(),使它们成为__init__()__del__()函数的异步对应项。

功能必须在创建应用程序之后,但在它开始运行之前构造。(service.create_app()service.run(app)

使用add()get()函数可以轻松地集中声明功能,然后在任何引用aiohttp应用程序的函数中使用它。

events.py

这里处理与amqp事件总线的传入和传出通信。

EventListener允许订阅eventbus消息。它将在收到回调时触发回调。可以随时(也可以在应用程序开始运行之前)设置订阅。

侦听器被设计为在无法访问EventBus时正常降级。不会引发任何错误,它将定期尝试重新连接并还原其订阅。

有关EventListener的实际实现,请参见brewblox_history

EventPublisher负责向eventbus发送新消息。每个应用程序一个发布服务器就足够了。

EventListener相反,发布服务器在尝试发布到无法访问的eventbus主机时将引发异常。 它将尝试为每个后续消息重新连接-不需要显式连接管理。

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

推荐PyPI第三方库


热门话题
带条纹的java开源CMS?   Java中的模板类   java为我的圣诞树建造底座   算法首次用户输入尝试不起作用(Java)   简单服务器客户端程序中的java EOF和SocketException   java的OpenJPA与OSGi配合使用吗   arraylist中的java排序   Java工具创建的WSDL文件存在WCF序列化问题   java公共布尔removeStudent(int-id)   正则表达式java正则表达式需要字符串验证   JavaSpring任务调度   java表“places”没有名为“smallDesc”的列   java将枚举集转换为整数数组   java将int数组转换为byte数组,反之亦然,最有效的方法是什么?   java错误:找不到适合添加的方法(字符串,类<RouterRequestManagerFragment>)   java JComponent不可见   javasocket编程中线程“awteventque0”java.lang.NullPointerException“异常”错误