自定义 Service

  1. 标准的 async start() 接口,用户可以异步的启动 Node.js 程序。
  2. 结构化的日志管理、配置能力。
  3. 进程内的启动顺序(依赖关系)管理。
  1. 一般用户可以通过 require('dorapan').getService(serviceName) 获得。
  2. Service 构造器中传入的 ServiceContext 亦有此方法。

Process 在 procfile.js 中进行定义,依靠如下语法:

上面的 pandora. service('serviceName', './service.js') 表示定义一个名字叫 serviceName 的 Service,并定义该 Service 的实现在 ./service.js

第二个参数除了传递一个相对路境外,也可以直接传递一个实现类的引用。最终,该语句会返回一个对象 。

我们可以通过 ServiceRepresentationChainModifier 完善对这个 Service 的定义。

下面通过一个简单的例子介绍全部的定义能力:

service().process(processName: string) 里面的 processName 可以有如下的取值:

  1. 某个已经定义了的进程名。
  2. ‘all’,全部定义了的进程。(会激活全部定义的进程,包括内置的默认定义,不建议使用)

每个 Service 都是一个 Class,这个 Class 需要实现 0 个必选接口,和 4 个可选接口。

new (context: )

start(): Promise<void> | void

可选,生命周期方法,启动服务。

stop?(): Promise<void> | void

静态属性、方法约束为:

dependencies: string[]

这个上面有不少的属性和方法,具体参考 API。下面介绍几个常用的:

主要的属性

serviceName: string

config: any

针对 Service 的配置,可以在 中给定。

dependencies: { [depName: string]: Service }

logger: ServiceLogger

你可以直接 new 你的实现类编写单元测试。