Open mstar-kk opened 4 years ago
兄弟你这个方案太复杂了。。。。有个更简单的,通过execSync去执行一个外部的异步脚本,比如那个脚本是用来获取配置中心的配置,然后在那个脚本结尾输出结果,在execsync的返回值中即可拿到那些配置。execsync会阻断整个服务的启动,放在config will load方法中就可以。如需具体的案例代码晚点可以贴上来。
@satancp 正解
你可以在 agent 的生命周期里面去获取,然后写入文件。 在 app 这边直接 require
兄弟你这个方案太复杂了。。。。有个更简单的,通过execSync去执行一个外部的异步脚本,比如那个脚本是用来获取配置中心的配置,然后在那个脚本结尾输出结果,在execsync的返回值中即可拿到那些配置。execsync会阻断整个服务的启动,放在config will load方法中就可以。如需具体的案例代码晚点可以贴上来。
学习了兄弟!
@satancp 有代码例子么?最近正好卡在这里了。
@xyyxlq 我今天晚点把案例发这边,可能比较晚,大概10点多的样子
先赞为敬,但是通过agent去写入文件没有解决的问题是,agent进程也会读取配置并加载插件的,比如sequelize,这个在agent的willReady里面去写入文件,还是会导致插件加载失败(因为此时配置文件还没有从配置中心拉取到)。我想问题应该在此处吧。
这个没办法,除非改了各个插件的初始化时机。agent 一般不需要 seq 吧。 实在复杂到这个程度了话,你肯定都镜像化了,直接在启动前读取配置就好了。
好的,我现在的解决就是在启动前先去读取配置写入文件的方式。[Facepalm]有个场景就是在agent中去订阅redis。所以,哈哈,问题不大。
兄弟你这个方案太复杂了。。。。有个更简单的,通过execSync去执行一个外部的异步脚本,比如那个脚本是用来获取配置中心的配置,然后在那个脚本结尾输出结果,在execsync的返回值中即可拿到那些配置。execsync会阻断整个服务的启动,放在config will load方法中就可以。如需具体的案例代码晚点可以贴上来。
执行脚本可能会有锁问题;我们现在加解密用的就是execSync去执行jar。jar里面获取读取密钥文件,多cpu下执行。jar会只成功执行一次
现在比较推荐在agent里面处理
YangLG_7 @.***>于2021年12月27日 周一11:20写道:
兄弟你这个方案太复杂了。。。。有个更简单的,通过execSync去执行一个外部的异步脚本,比如那个脚本是用来获取配置中心的配置,然后在那个脚本结尾输出结果,在execsync的返回值中即可拿到那些配置。execsync会阻断整个服务的启动,放在config will load方法中就可以。如需具体的案例代码晚点可以贴上来。
执行脚本可能会有锁问题;我们现在加解密用的就是execSync去执行jar。jar里面获取读取密钥文件,多cpu下执行。jar会只成功执行一次
— Reply to this email directly, view it on GitHub https://github.com/eggjs/egg/issues/4243#issuecomment-1001310365, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACDX2QSCYXMZEDIYKPQA6W3US7LP3ANCNFSM4LYXSMEQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.Message ID: @.***>
@satancp 我们现在就是在agent去执行execSync 同步获取jar解密出的内容;但是程序启动的时候,因为线上容器是多CPU的;同时运行 jar就会一个成功一个失败😂😂😂😂。这个错误不知道咋解决
@satancp 我们现在就是在agent去执行execSync 同步获取jar解密出的内容;但是程序启动的时候,因为线上容器是多CPU的;同时运行 jar就会一个成功一个失败😂😂😂😂。这个错误不知道咋解决
给文件加锁,一个进程启动的时候给文件加锁,只能他自己执行jar,其他进程等待或者轮询锁状态,执行成功后释放锁,给其他进程执行,最简单的办法,A进程修改a.jar文件名称到b.jar执行,执行完成后修改回a.jar,其他进程取不到a.jar重试,直到取到为止
案例代码晚点可以贴上来。
@satancp 我们现在就是在agent去执行execSync 同步获取jar解密出的内容;但是程序启动的时候,因为线上容器是多CPU的;同时运行 jar就会一个成功一个失败😂😂😂😂。这个错误不知道咋解决
给文件加锁,一个进程启动的时候给文件加锁,只能他自己执行jar,其他进程等待或者轮询锁状态,执行成功后释放锁,给其他进程执行,最简单的办法,A进程修改a.jar文件名称到b.jar执行,执行完成后修改回a.jar,其他进程取不到a.jar重试,直到取到为止
原来一部分解密是在app一部分在agent做的、但是会有jar执行问题;我现在是把所有解密都拿到agent去做就没这个问题了。不知道是什么原因导致的,
案例代码晚点可以贴上来。
@satancp 我们现在就是在agent去执行execSync 同步获取jar解密出的内容;但是程序启动的时候,因为线上容器是多CPU的;同时运行 jar就会一个成功一个失败😂😂😂😂。这个错误不知道咋解决
给文件加锁,一个进程启动的时候给文件加锁,只能他自己执行jar,其他进程等待或者轮询锁状态,执行成功后释放锁,给其他进程执行,最简单的办法,A进程修改a.jar文件名称到b.jar执行,执行完成后修改回a.jar,其他进程取不到a.jar重试,直到取到为止
原来一部分解密是在app一部分在agent做的、但是会有jar执行问题;我现在是把所有解密都拿到agent去做就没这个问题了。不知道是什么原因导致的,
听你的描述,应该跟生命周期有关,agent是一份,不会有文件争抢问题,
背景
思路
2、项目目录下的index.js
3、写入config目录下的配置文件etcd.json
4、在config中使用配置文件
5、关于此种方式的思考 在我们项目的实际部署使用中,测试服使用pm2统一维护node项目,在正式服中,用docker部署项目,所以几乎是用不到egg-script的维护功能,如果大家有什么更好的方式,或者我的错误,欢迎指点。
跟进