Skip to content

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);
});