集群
import {Util} from "../modules/core/utils";
const Queue = require('bull'),
cluster = require('cluster');
const numWorkers = 8;
const queue = new Queue("nike", {
redis: {port: 6379, host: '192.168.10.167', password: null},
prefix: 'nike_',
defaultJobOptions: {
attempts: 1,
removeOnComplete: true,
backoff: false,
delay: 0,
},
limiter: {
max: 200000,
duration: 1000,
},
settings: {
maxStalledCount: 1,
guardInterval: 1,//重新调度延迟
retryProcessDelay: 500,// delay before processing next job in case of internal error.
// drainDelay: 50000,
},
});
let count = 0;
if (cluster.isMaster) {
for (let i = 0; i < numWorkers; i++) {
cluster.fork();
}
cluster.on('online', async (worker) => {
for (let i = 0; i < 100; i++) {
await queue.add({data: 1});
console.log(await queue.count())
}
});
//工作退出了
cluster.on('exit', function (worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else {
queue.process(async (job) => {
count++;
await Util.Coder.sleep(2);
console.log("Job done by worker", cluster.worker.id, job.id, count);
return Promise.resolve();
});
}