自定义进程
如何定义进程
Process 在 procfile.js 中进行定义,依靠如下语法:
procfile.js
module.exports = function (pandora) {
pandora
.process('processName');
}
上面的 pandora.process('processName')
表示定义一个名字叫 processName
进程,该语句会返回一个对象 ProcessRepresentationChainModifier,我们可以通过该对象完善进程的定义。
下面通过一个简单的例子介绍:
procfile.js
module.exports = function (pandora) {
// 如果该进程定义存在则对其修改,否则就是新建
pandora.process('processName')
// 重命名进程
// 不传参数则获取
.name('renameIt')
// 标识进程的横向缩放的数量,默认 1 ,取值为数字或者 'auto'(自动为 CPU 数量)
// 不传参数则获取
.scale(5)
// 设置 Node.js 参数,全覆盖
// 进程内 process.execArgv 获取
// 如需增量请:.nodeArgs().push('--expose-gc')
// 不传参数则获取
.nodeArgs(['--expose-gc'])
// 设置进程参数
// 进程内 process.argv 获取
// 如需增量请:.nodeArgs().push('--a=b')
// 不传参数则获取
.args(['--a=b', '--c=d'])
// 该进程的环境变量,全覆盖
// 如需增量请:.env().x = 'y'
// 不传参数则获取
.env({
ENV_VAR: 'envValue'
})
// 进程启动顺序
// 不传参数则获取
.order(1)
// 这个进程的入口文件
// 如果不设置,这个进程将不会启动(除非有 Service 被分配到了这个进程)
// 不传参数则获取
.entry('./app.js')
// Drop(删除)该进程定义
.drop()
}
没有程序入口进程不会启动
如果没有启动该进程的启动入口,该进程不会启动。
启动入口包括:
.entry()
的定义- 有 Service 分配到这个进程
Scale 与进程的关系
- 如果一个进程定义的 Scale 大于 1 ,则使用 ScalableMater 进行启动,即 Master / Worker 模式。
- 如果一个进程定义的 Scale 为 1,直接启动。
如下图: