multi-lane-manager
Version:
Nacos 泳道管理与请求路由组件
141 lines (139 loc) • 6.76 kB
JavaScript
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