Nest 实现配置和注册中心
配置中心和注册中心
当我们使用 NestJS 框架开发微服务架构时,配置管理和服务发现是两个非常重要的方面。配置管理允许我们集中管理应用程序的配置信息,而服务发现则帮助我们自动发现和调用其他服务。在本文中,我们将介绍如何在 NestJS 中实现配置管理和服务发现。
配置中心
就是统筹管理我们所有的配置 比如数据库连接信息,redis 连接信息,第三方接口地址等等,这样省的发布的时候一个个去独立的服务器下面去改
注册中心
就是管理我们所有的服务,比如我们有一个用户服务,订单服务,支付服务,那么我们就可以把这三个服务注册到注册中心,然后我们就可以通过注册中心去调用这些服务,而不需要知道这些服务具体部署在哪里
Docker 安装 nacos
这里个人推荐必须是 4 核 8G,因为 nacos 需要占用很多资源
指定了 MODE 为 standalone 单机模式
- 启动成功后 访问
http://localhost:8848/nacos输入用户名和密码 都是 nacos 就可以了
配置中心
封装
- 在这里面我封装了 新增,删除,监听,查询
ts
import { NacosConfigClient } from "nacos";
const client = new NacosConfigClient({
serverAddr: "localhost:8848",
});
// 新增配置 我这里就是随便写的 你可以换成你自己的
const content = await client.publishSingle(
"config",
"DEFAULT_GROUP",
'{"host":"127.0.0.1","port":8848}'
);
// 查询化操作
const config = await client.getConfig("config", "DEFAULT_GROUP");
console.log(config);
// 删除配置
// await client.remove("config", "DEFAULT_GROUP");
// 监听变化
client.subscribe({ dataId: "config", group: "DEFAULT_GROUP" }, (content) => {
console.log(content);
});
setTimeout(() => {
client.publishSingle(
"config",
"DEFAULT_GROUP",
'{"host":"127.0.0.1","port":5000}'
);
}, 3000);- 使用 node 运行 命令
bash
node ./index.ts结果
注册中心
添加注册服务器
ts
import Nacos from "nacos";
const client = new Nacos.NacosNamingClient({
serverList: ["127.0.0.1:8848"],
namespace: "public",
logger: console,
});
await client.ready();
// 第1个微服务的实例
const bbsServiceName = "bbs_8080";
const instance1 = {
ip: "127.0.0.1",
port: 8080,
};
client.registerInstance(bbsServiceName, instance1);
// 第2个微服务的实例
const eestarServiceName = "eestar_8081";
const instance2 = {
ip: "127.0.0.1",
port: 8081,
};
client.registerInstance(eestarServiceName, instance2);删除注册服务器
ts
import Nacos from "nacos";
const client = new Nacos.NacosNamingClient({
serverList: ["127.0.0.1:8848"],
namespace: "public",
logger: console,
});
await client.ready();
const bbsServiceName = "bbs_8080";
const instance1 = {
ip: "127.0.0.1",
port: 8080,
};
client.deregisterInstance(bbsServiceName, instance1);获取注册服务器下面得所有实例
ts
import Nacos from "nacos";
const client = new Nacos.NacosNamingClient({
serverList: ["127.0.0.1:8848"],
namespace: "public",
logger: console,
});
await client.ready();
// 获取eestar所有实例
const instances = await client.getAllInstances("eestar_8081");
console.log(instances);监听注册服务器变化
ts
import Nacos from "nacos";
const client = new Nacos.NacosNamingClient({
serverList: ["127.0.0.1:8848"],
namespace: "public",
logger: console,
});
await client.ready();
client.subscribe("eestar_8081", (content) => {
console.log("666");
console.log(content);
});