使用 consul 注册多个节点

Register multiple nodes with consul

问题是,如何在同一ID下向consul注册多个节点。我在 docker 中 运行 设置一个领事服务器,在我的 machine 本地主机中我 运行 两个相同的进程 HelloWorld 我的 mac.

上的 nodejs 应用程序

问题3000 进程 运行ning 的条目被 [=15= 进程 运行ning 替换] 因此我最终只得到一个节点。

问题 2 我从哪里下载这个 GUI 客户端(不是 Web UI),如屏幕截图所示 Mac .


节点 1 端口 3000 的负载

{
  HTTP: 'http://My-Mac-Pro.local:3000/health',
  Interval: '15s',
  Name: 'My-Mac-Pro.local',
  ID: 'user1'
}

节点 2 端口 3001 的负载

{
  HTTP: 'http://My-Mac-Pro.local:3001/health',
  Interval: '15s',
  Name: 'My-Mac-Pro.local',
  ID: 'user2'
}

nodeJS代码

let http = require("http");
http.request({
    method: "PUT",
    hostname: env.CONSUL_HOST,
    port: 8500,
    path: "/v1/agent/check/register",
    headers: {
        "content-type": "application/json; charset=utf-8"
    }
}, function(response){
    if (response.statusCode == 200) {
        resolve();
    }
}).on("error", reject).end(JSON.stringify(body));

期望:看到web

下的多个节点

当您注册服务时,每个服务都应该注册唯一的服务ID

它可以是:${serviceName}-${hostname}-{ip}-${port}-${process.pid()}-${uuid.v4()} 或它们的任意组合,以确保您的服务 ID 是唯一的。注册负载中的不同 ID 是将 consul 设置为相同 app/serviceIdentity 运行 的不同实例的原因,它们不会 "override" 彼此

注册负载示例:

  const id = `${ip}-${hostname}-${serviceIdentity}-${port}`;
  const registrationDetails ={
    Name: serviceIdentity,
    ID: id,
    Address: ip,
    Port: parseInt(port),
    Check: {
      CheckID: `http-${id}`,
      Name: `http-${id}`,
      TLSSkipVerify: true,
      HTTP: `http://${host}:${port}/health`,
      Interval: '10s',
      Notes: `Service http health`,
      DeregisterCriticalServiceAfter: '60s',
    },
  };