egg 服务器集群情况下的定时任务执行操作(2种方式)
第一种做法不是很好 虽然可以避免数据重复处理的问题,但是存在单点故障的问题。disable:该参数为 false时,定时任务会被启动。这样的话多台机器上面都会执行,相当于增加了一个开关当执行到改机器主机名和配置主机名相同时执行定时任务。(如果服务是部署在docker里 就会不太好使了 因为主机名是会变化的)官方也提供了一些解决方案在agent.js中继承a...
·
第一种做法不是很好 虽然可以避免数据重复处理的问题,但是存在单点故障的问题。
disable
:该参数为 false时,定时任务会被启动。
这样的话多台机器上面都会执行,相当于增加了一个开关当执行到改机器主机名和配置主机名相同时
执行定时任务。(如果服务是部署在docker里 就会不太好使了 因为主机名是会变化的)
官方也提供了一些解决方案
在 agent.js
中继承 agent.ScheduleStrategy
,然后通过 agent.schedule.use()
注册即可
// {app_root}/agent.js
module.exports = function(agent) {
class CustomStrategy extends agent.ScheduleStrategy {
start() {
agent.notify.subscribe('remote_task', data => {
//随机通知一个 worker 执行任务
this.sendOne(data);
});
}
}
agent.schedule.use('custsom', CustomStrategy);
};
然后在schedule目录文件下定义
const Subscription = require('egg').Subscription;
class ClusterTask extends Subscription {
static get schedule() {
return {
type: 'custom',
};
}
async subscribe(data) {
await data;
}
}
如果写的对你有一点点帮助的话,就随便帮下小明同学 感谢大伙 !!!
一、 左下角点个赞再走吧,给博主一点关怀,可以让更多人看到
二、可以关注我的微信公众号「一起学Node」基于前后端NodeJs相关技术栈分享 交流 学习
更多推荐
已为社区贡献1条内容
所有评论(0)