由于 Egg.js 是支持多进程的,在启动的时候会根据当前的CPU的核数来创建 worker
那就会有多个worker的情况,这样就会导致子进程在每个worker中都会执行。
会导致不同的worker操作同一个数据的情况
可以用 Egg.js 中的 Agent 机制,来避免多次执行
或者使用 Node.js 中的 Cluster 来判断子进程,以便来确认子进程要在哪个worker中执行
const { fork } = require('child_process');
if (cluster.isWorker && cluster.worker.id === 1) {
const child = fork('path/to/child.js'); // ...
}
设置启动 worker 数量
一般 worker 的数量和 CPU 核数相关,有几核,就有几个 worker。开发环境一般不需要设置,只有在正式环境遇到了问题,开发环境需要复现问题时,用到。
方式一
在 config.default.ts 文件中加上
config.cluster = {
workers: 2,
};
方式二
在 package.json 中 "scripts" 中加一个启动
"set-worker": "egg-bin dev --workers=4"
然后直接 npm run set-worker 就可以了
方式三
直接命令行执行
egg-bin dev --workers=4
egg-scripts start --daemon --workers=4