bull在创建队列时会创建三个redis客户端,分别用于不同的任务
Object.defineProperties(this, {
// Queue client (used to add jobs, pause queues, etc);
client: {
get: lazyClient('client')
},
// Event subscriber client (receive messages from other instance of the queue)
eclient: {
get: lazyClient('subscriber')
},
bclient: {
get: lazyClient('bclient')
}
});
client
client是最常用的客户端,用于添加任务 / 获取任务锁 / 移动任务状态等等
client.addJob(keys)
queue.client.takeLock([
job.lockKey(),
queue.token,
queue.settings.lockDuration
]);
queue.client.moveToActive(keys.concat(args)).then(raw2jobData);
job.queue.client.moveToFinished(args)
queue.client.moveStall
Bull在创建任务队列时使用三个独立的Redis客户端:client用于常规任务,如添加任务和状态管理;eclient专门用于订阅事件;bclient则用于阻塞操作,当队列为空时等待新任务。尽管每个客户端职责明确,但为节省资源,可以通过自定义createClient实现client和eclient的重用,bclient因涉及阻塞操作而不宜重用。
订阅专栏 解锁全文
1347

被折叠的 条评论
为什么被折叠?



