Files
DDDMicroFrontend/front-end/nacos-federation/src/nacosServiceManage.ts
2025-09-20 02:26:42 +08:00

67 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { NacosNamingClient } from 'nacos';
// @ts-ignore
import { formatServiceUrl, getLocalIP } from "./utils";
const logger = console;
export interface RegisterOptions {
serverList: string;
/** 服务名称(如 'main-app' */
serviceName: string;
/** 服务端口号 */
port: number;
/** 命名空间(用于环境隔离,默认 'public' */
namespace?: string;
}
export class nacosServiceManage {
public nacosClient!: NacosNamingClient;
public initOptions!: RegisterOptions;
constructor(option: RegisterOptions) {
this.initOptions = option;
this.init()
}
async init() {
this.nacosClient = new NacosNamingClient({
logger,
serverList: this.initOptions.serverList,
namespace: this.initOptions.namespace || 'public',
});
await this.nacosClient.ready();
this.reg()
}
/**
* 注册服务到Nacos并返回客户端实例
*/
async reg() {
const { serviceName, port } = this.initOptions;
const ip = getLocalIP();
// @ts-ignore
await this.nacosClient.registerInstance(serviceName, {
port, ip
})
console.log(`[nacos] 服务 ${ serviceName } 已注册:${ formatServiceUrl(ip, port) }`);
}
/**
* 从Nacos发现服务地址
* @param serviceName 发现选项
* @returns 服务地址(如 'http://192.168.1.101:1301'
*/
async find(serviceName: string) {
const instances = await this.nacosClient.getAllInstances(serviceName);
if (instances.length === 0) {
throw new Error(`[nacos] 未发现服务 ${ serviceName } 的实例`);
}
return formatServiceUrl(instances[0].ip, instances[0].port);
}
}