自定义进程

如何定义进程

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

procfile.js

  1. module.exports = function (pandora) {
  2. pandora
  3. .process('processName');
  4. }

上面的 pandora.process('processName') 表示定义一个名字叫 processName 进程,该语句会返回一个对象 ProcessRepresentationChainModifier自定义进程 - 图1,我们可以通过该对象完善进程的定义。

下面通过一个简单的例子介绍:

procfile.js

  1. module.exports = function (pandora) {
  2. // 如果该进程定义存在则对其修改,否则就是新建
  3. pandora.process('processName')
  4. // 重命名进程
  5. // 不传参数则获取
  6. .name('renameIt')
  7. // 标识进程的横向缩放的数量,默认 1 ,取值为数字或者 'auto'(自动为 CPU 数量)
  8. // 不传参数则获取
  9. .scale(5)
  10. // 设置 Node.js 参数,全覆盖
  11. // 进程内 process.execArgv 获取
  12. // 如需增量请:.nodeArgs().push('--expose-gc')
  13. // 不传参数则获取
  14. .nodeArgs(['--expose-gc'])
  15. // 设置进程参数
  16. // 进程内 process.argv 获取
  17. // 如需增量请:.nodeArgs().push('--a=b')
  18. // 不传参数则获取
  19. .args(['--a=b', '--c=d'])
  20. // 该进程的环境变量,全覆盖
  21. // 如需增量请:.env().x = 'y'
  22. // 不传参数则获取
  23. .env({
  24. ENV_VAR: 'envValue'
  25. })
  26. // 进程启动顺序
  27. // 不传参数则获取
  28. .order(1)
  29. // 这个进程的入口文件
  30. // 如果不设置,这个进程将不会启动(除非有 Service 被分配到了这个进程)
  31. // 不传参数则获取
  32. .entry('./app.js')
  33. // Drop(删除)该进程定义
  34. .drop()
  35. }

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

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

启动入口包括:

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

Scale 与进程的关系

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

如下图:

img