[eggjs/egg]agent进程和worker进程在egg-ready没有完成时,怎么通信。

2024-08-05 982 views
6

agent进程和worker进程在egg-ready没有完成时,怎么通信。

回答

3

egg-ready 没完成说明 worker 都没有全部启动完,你想通信啥?

1

agent worker是优先启动的,app worker在加载的时候,是可以往agent进程发送消息的,但是反过来就必须等app进程ready完成

8

问题是为什么要在这时候做这事呢?

7

让您笑话一下,因为egg生命周期从configWillLoad到didLoad不能支持异步,我现在需要异步加载远程配置文件,所以考虑在agent进程中去做这个加载配置的工作,然后想再把拿到remote config推送给app进程,但目前框架不支持,所以我现在只能通过写文件的方式。

7

@TomorrowCat 你这招太绝了,牛逼。写文件其实挺好的。

2

其实还有一个坑想请教一下,目前这么做还有一个问题。有个前提,比如egg-sequelize插件,它在agent进程中也会加载,而且在调用agent方法的时候,就会先验证一次数据库相关的配置。我目前封装了一个eureka插件,我需要等待eureka插件加载完成,才能读取远程配置。那么问题就是sequelize读取配置在eureka插件加载完成之前。

目前这个问题,我只能单独把sequelize这个插件拿出来,等配置加载完成,再直接调用agent方法

5

@TomorrowCat 如果 k8s 的话,其实应该是通过 configmap 来注入配置的。

7

了解,不过我们运维放弃了k8s

6

。。。 所以运维同学担心饭碗问题么

8

是的 我们现在也是一样的困扰;我们在agent进程去读配置然后推动到app通信;在agent中会有读写文件然后解密配置的耗时操作;解密我们是使用 execSync进行同步调用jar命令获取解密数据。但是在多CPU下执行。jar命令只会成功一次。。。。应该是jar中有锁操作。。。