There was an error while loading. Please reload this page.
nodejs的热更新的原理就是通过 delete require.cache[x] 然后重新 require
delete require.cache[x]
require
现在pinus框架提供了 handler remoter crons的热更新方法,
热更新流程大概是这样:
可以根据自己对应进程的逻辑需要来调用。
至此,基本可以实现完整的应用不停机热更新。
有一点需要注意 manualReloadProxies(app) 这个方法的调用需要保证在 manualReloadRemoters(app) 调用之后。 因为 manualReloadProxies 不会清除 remoter的缓存。manualReloadRemoters这个方法会清除缓存。 所以这两个方法是成双成对的。 如果没有对remoter添加新方法,manualReloadProxies 就不需要调用。
经过测试, manualReloadProxies 方法有很大机率造成内存泄漏(也有可能是我们公司项目的特殊性造成的),线上使用请仔细测试。也可以选择不用这个方法,也就是不支持新添加的rpc方法,特殊情况下可以通过 直接调用 rpcInvoke来替代。
manualReloadProxies
manualReloadProxies 的替代方法: proxyConfig 添加 dynamicUserProxy:true 参数 使用动态 rpc.user.servertype rpc 方法 ,将支持 热更新的 新rpc方法与新rpc文件
proxyConfig
dynamicUserProxy:true
使用动态 rpc.user.servertype rpc 方法 ,将支持 热更新的 新rpc方法与新rpc文件
参考设置:
app.set('proxyConfig', { mailboxFactory: createTcpMailBox, // bufferMsg:true // rpc 超时时间 timeout: 20 * 1000, dynamicUserProxy: true, });