UNPKG

multi-lane-manager

Version:

Nacos 泳道管理与请求路由组件

141 lines (139 loc) 6.76 kB
import { getServerPort } from "./chunk-WRIFLLLY.mjs"; import { deregisterServiceInstance, registerServiceInstance } from "./chunk-IQGU3EKR.mjs"; import { getConfig, getGlobalState, updateConfigPort } from "./chunk-EU6U6V5A.mjs"; import { logger } from "./chunk-W2IK3WU4.mjs"; // src/runtime/nitro-plugin.ts logger.info(`====== \u{1F680} \u6CF3\u9053\u7BA1\u7406 Nitro \u63D2\u4EF6\u6A21\u5757\u88AB\u52A0\u8F7D ======`); logger.debug(`\u23F1\uFE0F \u5F53\u524D\u65F6\u95F4: ${(/* @__PURE__ */ new Date()).toISOString()}`); logger.debug(`\u{1F194} \u5F53\u524D\u8FDB\u7A0BID: ${process.pid}`); logger.debug(`\u{1F4C2} \u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55: ${process.cwd()}`); logger.debug(`\u{1F527} \u73AF\u5883\u53D8\u91CF: NODE_ENV=${process.env.NODE_ENV}, NITRO_PORT=${process.env.NITRO_PORT || "\u672A\u8BBE\u7F6E"}, PORT=${process.env.PORT || "\u672A\u8BBE\u7F6E"}`); var globalState = getGlobalState(); if (!globalState._laneMgrRegistered) { globalState._laneMgrRegistered = false; globalState._laneMgrPort = void 0; logger.debug(`\u{1F504} \u521D\u59CB\u5316\u5168\u5C40\u6CE8\u518C\u72B6\u6001\u4E3A false`); } else { logger.debug(`\u2139\uFE0F \u5168\u5C40\u6CE8\u518C\u72B6\u6001\u5DF2\u5B58\u5728: ${globalState._laneMgrRegistered}`); } var nitro_plugin_default = async (nitroApp) => { logger.info(`====== \u{1F50C} \u6CF3\u9053\u7BA1\u7406 Nitro \u63D2\u4EF6\u51FD\u6570\u88AB\u8C03\u7528 ======`); logger.debug(`\u23F1\uFE0F \u5F53\u524D\u65F6\u95F4: ${(/* @__PURE__ */ new Date()).toISOString()}`); logger.debug(`\u2705 nitroApp \u5BF9\u8C61\u53EF\u7528: ${!!nitroApp}`); logger.debug(`\u2705 nitroApp.hooks \u53EF\u7528: ${!!nitroApp.hooks}`); try { const { default: middleware } = await import("./runtime/server-middleware.mjs"); logger.info(`\u2705 \u6210\u529F\u5BFC\u5165\u4E2D\u95F4\u4EF6`); nitroApp.hooks.hook("request", middleware); logger.info(`\u2705 \u6210\u529F\u6DFB\u52A0\u4E2D\u95F4\u4EF6\u5230 Nitro \u5E94\u7528`); } catch (error) { logger.error(`\u274C \u5BFC\u5165\u6216\u6DFB\u52A0\u4E2D\u95F4\u4EF6\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`); } try { if (nitroApp.options && nitroApp.options.runtimeConfig) { const appName = nitroApp.options.runtimeConfig.appName || nitroApp.options.runtimeConfig.public && nitroApp.options.runtimeConfig.public.appName; if (appName) { global.__nitroAppName = appName; logger.info(`\u2705 \u4ECENitro\u8FD0\u884C\u65F6\u914D\u7F6E\u83B7\u53D6\u5E94\u7528\u540D\u79F0: ${appName}`); const { clearConfigCache } = await import("./utils/config.mjs"); clearConfigCache(); } } } catch (error) { logger.warn(`\u26A0\uFE0F \u65E0\u6CD5\u4ECENitro\u8FD0\u884C\u65F6\u914D\u7F6E\u83B7\u53D6\u5E94\u7528\u540D\u79F0: ${error}`); } (async () => { logger.info(`====== \u{1F4DD} \u5F00\u59CB\u6CE8\u518C\u670D\u52A1 ======`); try { if (globalState._laneMgrRegistered) { logger.info(`\u2139\uFE0F \u670D\u52A1\u5DF2\u6CE8\u518C\uFF0C\u8DF3\u8FC7\u91CD\u590D\u6CE8\u518C`); return; } const port = getServerPort(); updateConfigPort(port); globalState._laneMgrRegistered = true; globalState._laneMgrPort = port; logger.info(`\u{1F4E4} \u5F00\u59CB\u6CE8\u518C\u670D\u52A1\u5230 Nacos\uFF0C\u7AEF\u53E3: ${port}`); const success = await registerServiceInstance(port); logger.info(`\u{1F4CB} \u670D\u52A1\u6CE8\u518C\u7ED3\u679C: ${success ? "\u2705 \u6210\u529F" : "\u274C \u5931\u8D25"}`); if (success) { const gracefulShutdown = async () => { logger.info(`\u{1F6D1} \u670D\u52A1\u5668\u5173\u95ED\uFF0C\u6B63\u5728\u6CE8\u9500\u670D\u52A1...`); await deregisterServiceInstance(port); logger.info(`\u2705 \u670D\u52A1\u6CE8\u9500\u5B8C\u6210`); }; process.on("beforeExit", gracefulShutdown); process.on("SIGINT", async () => { logger.info(`\u{1F534} \u6536\u5230 SIGINT \u4FE1\u53F7`); await gracefulShutdown(); process.exit(0); }); process.on("SIGTERM", async () => { logger.info(`\u{1F534} \u6536\u5230 SIGTERM \u4FE1\u53F7`); await gracefulShutdown(); process.exit(0); }); nitroApp.hooks.hook("close", async () => { logger.info(`\u{1F534} \u6536\u5230 Nitro close \u4E8B\u4EF6`); await gracefulShutdown(); }); logger.info(`\u2705 \u5DF2\u8BBE\u7F6E\u670D\u52A1\u6CE8\u9500\u94A9\u5B50`); } } catch (error) { logger.error(`\u274C \u670D\u52A1\u6CE8\u518C\u8FC7\u7A0B\u4E2D\u51FA\u9519:`, error); } })(); nitroApp.hooks.hook("request", async (event) => { if (event.context._laneManagerHandled || event.context._laneManagerProcessing) { return; } console.log(`[multi-lane-manager:nitro-plugin] Intercepting request: ${event.path}`); if (event.path.startsWith("/_nuxt/")) { console.log(`[multi-lane-manager:nitro-plugin] Intercepting _nuxt request1: ${event.path}`); logger.info(`\u{1F50D} Nitro\u63D2\u4EF6\u62E6\u622A\u5230\u9759\u6001\u8D44\u6E90\u8BF7\u6C42: ${event.path}`); } if (event.path.startsWith("/api/")) { console.log(`[multi-lane-manager:nitro-plugin] Intercepting API request: ${event.path}`); logger.info(`\u{1F50D} Nitro\u63D2\u4EF6\u62E6\u622A\u5230API\u8BF7\u6C42: ${event.path}, \u65B9\u6CD5: ${event.node.req.method}`); } if (event.path === "/api/lane-manager/health") { event.context._laneManagerProcessing = true; logger.debug(`\u{1FA7A} \u6536\u5230\u5065\u5EB7\u68C0\u67E5\u8BF7\u6C42: ${event.path}`); const config = getConfig(); try { if (!event.node.res.headersSent) { event.node.res.statusCode = 200; event.node.res.setHeader("Content-Type", "application/json"); event.node.res.end(JSON.stringify({ status: "ok", registered: globalState._laneMgrRegistered || false, port: globalState._laneMgrPort || null, laneId: config.currentLaneId, serviceName: config.serviceName, timestamp: (/* @__PURE__ */ new Date()).toISOString(), nitroPluginLoaded: true })); } } catch (error) { logger.error(`\u274C \u5904\u7406\u5065\u5EB7\u68C0\u67E5\u8BF7\u6C42\u65F6\u51FA\u9519: ${error instanceof Error ? error.message : String(error)}`); } event.context._laneManagerHandled = true; } }); logger.info(`====== \u2705 \u6CF3\u9053\u7BA1\u7406 Nitro \u63D2\u4EF6\u521D\u59CB\u5316\u5B8C\u6210 ======`); }; export { nitro_plugin_default }; //# sourceMappingURL=chunk-NRCDJZDQ.mjs.map