eggjs-nacos
TypeScript icon, indicating that this package has built-in type declarations

1.1.9 • Public • Published

安装插件

$ npm i eggjs-nacos --save

开启插件

  1. 服务注册

开启插件后,启动时服务会注册到 Nacos, 请确保 config 中 nacos.serverList 和 nacos.client 已填写。多进程下单一注册服务

  1. 服务发现

配置 nacos.subscribers 后, 启动服务时会自动监听配置的服务。多进程下单一发现服务

// {app_root}/config/plugin.js
exports.nacos = {
  enable: true,
  package: "eggjs-nacos",
};

配置

// {app_root}/config/config.default.js
exports.nacos = {
  serverList: "", // 必填,  nacos 服务url
  isRegisterInstance: true, // 非必填,  是否注册实例, 默认 true
  client: {
    namespace: "", // 必填,  命名空间ID,用于后续服务注册、服务发现
    serviceName: "", // 非必填, 服务名称, 默认自动获取package.json中的name
    groupName: "", // 非必填, 分组名称 默认 DEFAULT_GROUP
    username: 'user', // 非必填
    password: 'pass', // 非必填
  },
  subscribers: {
    test01Service: {
      serviceName: "egg-test", // 服务名称
      groupName: "", // 默认 DEFAULT_GROUP
      clusters: "", // 默认 DEFAULT
      subscribe: true, // 是否订阅服务  默认 true
    },
    test02Service: {
      serviceName: "egg-test02", // 服务名称
      subscribe: false,
    },
  },
};

使用

test01Service 服务已订阅的话将根据权重轮训向实例发起请求

const result = await this.ctx.nacos.test01Service.request("/tab/list"); // 默认 GET 请求
if (result.status !== 200) throw Error("Error ...");
console.log(result.data);

test02Service 服务未订阅的话每次调用会向 Nacos 服务器获取实例,然后在这些实例中随机挑选一个发起请求

const options = {
  method: "POST",
  dataType: "json",
  timeout: 30000,
  data: { a: "11", b: "22" },
};
const result = await this.ctx.nacos.test02Service.request(
  "/tab/create",
  options
);
if (result.status !== 200) throw Error("Error ...");
console.log(result.data);

获取配置中心

具体用法和 node-apollo 使用一样

{app_root}/nacos.js

const { fetchRemoteNacosConfig } = require("eggjs-nacos");
fetchRemoteNacosConfig(
  {
    serverAddr: "127.0.0.1:8848",
    namespace: "dev", // 命名空间ID
  },
  [
    {
      namespace: "public", // 命名空间ID, 优先使用这里配置的命名空间ID
      configs: [
        {
          dataId: "com.dq.redis",
          group: "DEFAULT_GROUP",
        },
      ],
    },
    {
      // 未配置命名空间的话默认使用上面的 dev
      configs: [
        {
          dataId: "com.dq.test",
          group: "DEFAULT_GROUP",
        },
      ],
    },
  ]
).then((data) => {
  console.log("env:", data);
});

{app_root}/package.json

...
"scripts": {
  "dev": "node nacos.js && egg-bin dev",
  "start": "node nacos.js && egg-scripts start"
}
...

读取配置设置到环境变量的两种方式

// {app_root}/config/plugin.js
...
exports.nacos = {
  enable: true,
  package: "eggjs-nacos",
};
...

// 或者 {app_root}/config/config.default.ts
...
require('eggjs-nacos').setEnv();
...

从环境变量中读取配置使用 {app_root}/config/config.default.ts

...
config.redis = {
  client: {
    host: process.env["redis.host"], // 从环境变量中读取配置
    port: process.env["redis.port"],
    password: process.env["redis.password"],
    db: process.env["redis.db"],
  },
};
...

APIs

service

  • request(url, options) 向实例发起请求.
  • pick() 挑选一个实例.
  • selectInstances() 获取所有实例.

config

  • fetchRemoteNacosConfig(clientOptions, configOptions) 获取远程 Nacos 配置信息
    • clientOptions {ClientOptions}
    • configOptions {Array}
      • namespace {String} 命名空间 ID, 优先使用
      • configs {Array}
        • dataId {String}
        • group {String} 分组
  • createEnvFile(config) 将配置信息写入到文件
    • config {Object}
  • setEnv() 注入到环境变量

License

BSD-2-Clause

Package Sidebar

Install

npm i eggjs-nacos

Weekly Downloads

0

Version

1.1.9

License

ISC

Unpacked Size

23.6 kB

Total Files

14

Last publish

Collaborators

  • dq198