自定义进程

如何定义进程

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()
}

没有程序入口进程不会启动

如果没有启动该进程的启动入口,该进程不会启动。

启动入口包括:

  1. .entry() 的定义
  2. 有 Service 分配到这个进程

Scale 与进程的关系

  1. 如果一个进程定义的 Scale 大于 1 ,则使用 ScalableMater 进行启动,即 Master / Worker 模式。
  2. 如果一个进程定义的 Scale 为 1,直接启动。

如下图:

img

上次更新: 2018-9-19 14:35:44