Зарегистрировать несколько узлов с консулом - PullRequest
0 голосов
/ 01 ноября 2019

Вопрос в том, как зарегистрировать несколько узлов с консулом под одним и тем же идентификатором. Я запускаю консул-сервер в докере, и на моем компьютере localhost я запускаю два процесса одного и того же приложения HelloWorld nodejs на моем Mac.

Проблема : запись для процесса, запущенного в 3000, заменяется процессом, запущенным в 3001, поэтому я заканчиваю только одним узлом.

Вопрос 2 Где я могу скачатьэтот клиент GUI (не веб-интерфейс) для 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'
}

код узла JS

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

enter image description here

1 Ответ

1 голос
/ 11 ноября 2019

Когда вы регистрируете сервисы, каждая из сервисов должна регистрироваться с уникальным сервисом ID.

. Это может быть что-то вроде: ${serviceName}-${hostname}-{ip}-${port}-${process.pid()}-${uuid.v4()} или любая их комбинация для обеспечения уникальности идентификатора вашего сервиса. Различное ID в полезной нагрузке регистрации - это то, что устанавливает консул в разные экземпляры одного и того же приложения / serviceIdentity, работающего, и они не будут "переопределять" друг друга.

Пример полезной нагрузки регистрации:

  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',
    },
  };
...