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 Android HttpClient cookies   如何使用Java在远程系统上运行SSH命令?   java从字符串数组中的字符串末尾删除“,”   在One plus 3t手机上,当应用程序被终止或从最近的应用程序中刷出时,java Android FCM推送通知不起作用   java如何使垂直滚动条始终位于jtable的末尾   在java中解析迄今为止“未知”的字符串   javascript在Java中获取Nashorn JsonObject   java windows 10和ubuntu可以使用相同的JDK吗?   java在不同的文件中记录不同的日志。但所有日志都放在同一个文件中   具有特定jdk的java Gradle构建项目   xml Java web服务生成错误响应   javascript Jaggery文件更改不显示   java输出二进制搜索树数组   将BufferedReader解析为JSON对象时,java在位置处意外标记文件结尾