Swift.org-SWIFT服务生命周期简介

2020-07-16 14:39:23

我很高兴宣布SWIFT服务器生态系统的一个新开源项目-SWIFT服务生命周期。服务生命周期是一个SWIFT软件包,旨在帮助服务器应用程序(也称为服务)管理其启动和关闭顺序。

大多数服务都有启动和关闭工作流逻辑,这一逻辑通常对故障很敏感,很难正确处理。启动序列包括初始化线程池、运行数据迁移、预热缓存和其他形式的状态初始化等操作,然后再接收流量或接受事件。关闭顺序包括释放占用文件描述符的资源或其他系统资源,如果清除不正确,这些资源可能会泄漏。

今天,服务器应用程序和框架必须自己找到解决需求的方法,这很容易出错。为了使事情更安全、更容易,服务生命周期以一种安全、可重用和与框架无关的方式对这一常见需求进行了编码。它可以与任何服务器框架集成,也可以直接集成在服务器应用程序的Main中。

推荐的使用该库的方式是在服务器应用程序的Main中创建一个ServiceLifeccle实例,并向其注册LifecycleTasks。在调用Start函数时,ServiceLifeccle将按照这些任务的注册顺序启动它们。

缺省情况下,ServiceLifeccle还注册一个捕获int和term的信号处理程序,这两个信号是现代部署平台中用来传递关闭请求的典型信号。一旦捕获到信号,关闭序列就开始了,LifecycleTasks会以与注册顺序相反的顺序关闭。

//导入包。导入生命周期//初始化`Lifecycle`容器。var lifecycle=ServiceLifecycle()//注册应用程序退出时应该关闭的资源。/本例中,我们注册了一个SwiftNIO`EventLoopGroup`//,并传递了关机时调用的`syncShutdownGracfully`函数。设eventLoopGroup=MultiThreadedEventLoopGroup(number OfThread:System.。coreCount)生命周期。registerShutdown(名称:";eventLoopGroup";,。同步(eventLoopGroup。syncShutdownGracally)//注册应用程序启动时应启动//和应用程序退出时应关闭的另一个资源。/在本例中,我们注册了一个人为的`DatabaseMigrator`//,并传递了启动时调用的`Migrate`函数//和关机时调用的`shutdown`函数。让Migrator=DatabaseMigrator(eventLoopGroup:eventLoopGroup)生命周期。注册(名称:";Migrator";,启动:。异步(迁移程序。迁移)、关闭:。异步(迁移程序。关机))//启动应用程序。/使用`register`函数传入的启动处理程序//将按照注册顺序调用。生命周期。start(){错误在//启动完成处理程序中//如果发生启动错误,如果let error=error{logger.。错误(";启动\(自身)☠️:\(错误)";)}其他{记录器。信息(";\(SELF)已成功启动🚀";)}}//等待应用程序退出/这是一个阻塞操作,通常会等待`Signal`。//`Signal`可以在`lifecycle.init`处配置,默认为`INT`和`TERM`。//使用`register`或`registerShutdown`函数传入的关机处理程序//将按照与注册顺序相反的顺序调用。生命周期。等待()。

源代码是可用的,我们鼓励来自开源社区的贡献。如果您有反馈、问题或想要讨论该项目,请随时在SWIFT论坛上聊天。如果您想报告错误,请使用GitHub问题跟踪器。我们期待着与您合作,并帮助推动行业迈向更好、更安全的编程未来。