关于eggjs定时任务worker类型遇到的问题
module.exports = {
// 通过 schedule 属性来设置定时任务的执行间隔等配置
schedule: {
interval: '1s', // 1 分钟间隔
type: 'worker', // 指定随机worker执行
},
// task 是真正定时任务执行时被运行的函数,第一个参数是一个匿名的 Context 实例
async task(ctx) {
const res = await ctx.curl('http://www.baidu.com', {
dataType: 'text',
});
ctx.app.cache = res.data;
},
};
使用worker类型的时候在控制器里面有时会拿不到app.cache,是因为worker随机的原因吗? 如果使用all在控制器可以拿到app.cache,但如果是8核机器岂不是一次发8个请求。。。
========分割线========= 刚又修改了下定时任务每5s做一次 ctx.app.cache = Math.random() ,然后定时5s请求一次控制器,发现控制器返回结果总是不是及时更新啊。。。。。
定时器都更新好多次值了,控制器还是N秒之前的值。。
========又一个分割线========= 发现了,就是多进程原因
1 回复
app.cache
的 app
也叫 worker
,有多个进程的,内存变量自然不可能共享。
一般共享的内存放到 redis 好点,非要放 app 的话只能是 all,或者看下 https://eggjs.org/zh-cn/advanced/cluster-client.html 这篇里面提到的高级用法。