关于eggjs定时任务worker类型遇到的问题
发布于 7 年前 作者 udbmnm 7091 次浏览 来自 问答
  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请求一次控制器,发现控制器返回结果总是不是及时更新啊。。。。。 27.png

定时器都更新好多次值了,控制器还是N秒之前的值。。

========又一个分割线========= 发现了,就是多进程原因 4811.gif

1 回复

app.cacheapp 也叫 worker,有多个进程的,内存变量自然不可能共享。

一般共享的内存放到 redis 好点,非要放 app 的话只能是 all,或者看下 https://eggjs.org/zh-cn/advanced/cluster-client.html 这篇里面提到的高级用法。

回到顶部