В этой статье в основном рассказывается, как Node.js интегрируется с Consul.Consul — это просто реализация регистрации службы, но есть и другие, такие как Zookeeper, Etcd и т. д. Обнаружение регистрации службы играет важную роль в архитектуре микросервиса, наряду с появлением из-за большого количества сервисов управление конфигурацией и управление эксплуатацией и обслуживанием между сервисами стало трудно поддерживать.Эти проблемы можно решить с помощью Consul, а также реализовать управление сервисами и мониторинг сервисов.
Дополнительные знания о Consul не будут здесь повторяться, но я надеюсь, что вы сможете понять их до изучения этого раздела, пожалуйста, перейдите к тому, что я написал ранееСтатьи из серии Consul, посвященные обнаружению регистрации сервисов микросервисов.
Инициализировать клиент Consul
Для инициализации клиента Consul следующие проекты о клиенте Consul в Node.js используют модуль node-consul.
Инструкции по настройке ядра
- хост (строка, по умолчанию: 127.0.0.1): настроить адрес Consul
- порт (целое число, по умолчанию: 8500): настроить порт Consul
- безопасный (логический, по умолчанию: false): включить HTTPS
- promisify (Boolean|Function, необязательный): включить стиль Promise, по умолчанию — обратный вызов
Пример
const Consul = require('consul');
const consul = new Consul({
host: '192.168.6.128',
port: 8500,
promisify: true,
});
Регистрация службы и проверка работоспособности
Зарегистрируйте услугу и начните проверку работоспособности
Инструкции по настройке ядра
- name (String): зарегистрированное имя службы
- id (строка, необязательно): идентификатор регистрации службы.
- теги (String[], необязательный): служебные теги
- адрес (строка, необязательный): адрес службы (клиента), который необходимо зарегистрировать.
- порт (целое число, необязательно): сервисный порт (клиент), который необходимо зарегистрировать.
- check (объект, необязательный): основные параметры проверки работоспособности службы следующие.
- http (строка): путь проверки работоспособности, требуется параметр интервала.
- interval (String): частота проверки работоспособности
- тайм-аут (строка, необязательно): тайм-аут проверки работоспособности
- checks (Object[], необязательный): если есть несколько путей проверки, это может быть в виде массива объектов.Параметры указаны в проверке выше
Простой пример
consul.agent.service.register({
name: serviceName,
address: '192.168.20.193',
port: 3000,
check: {
http: 'http://192.168.20.193:3000/health',
interval: '10s',
timeout: '5s',
}
}, function(err, result) {
if (err) {
console.error(err);
throw err;
}
console.log(serviceName + ' 注册成功!');
})
Настройка консоли администратора Consul
Consul предоставляет хранилище ключей/значений, которое можно использовать в качестве центра конфигурации для сервисов, и предоставляет три формата: JSON, YAML и HCL.В самой ранней версии Consul был только один формат JSON.
Вот данные, которые я настроил для консоли Consul, как показано на изображении ниже:
Внедрение центра конфигурации услуг
Функция Key/Value Consul может использоваться как центр конфигурации службы.Для некоторых переменных параметров в проекте информация может быть настроена в Consul, чтобы при изменении данных проект не приходилось переиздавать из-за к изменениям конфигурации.
Получить информацию о конфигурации
Этот ключ — это путь, настроенный для нас. Например, если я хочу получить данные пользователя, настроенные выше, ключ — «разработать/пользователь».
consul.kv.get(key)
Обновить информацию о конфигурации
- ключ (строка): обновленный путь, например, «разработка/пользователь»
- value (String|Buffer): обновленная информация о данных
Примечание: если мы хотим обновить какое-то поле в JSON, то сначала нам нужно прочитать JSON-объект через consul.kv.get, а после того, как программа его обработает, передать вторым параметром набора для обновления.
consul.kv.set('develop/user', JSON.stringify(user))
HTTP-вызовы API
Его также можно вызвать напрямую через интерфейс HTTP API, например:http://192.168.6.128:8500/v1/kv/develop/user?raw, если вы просто хотите использоватьВ качестве центра конфигурации Consul также может хранить данные локально и регулярно обновлять локальную конфигурацию с помощью простых вызовов HTTP API, но вам нужно реализовать это самостоятельно.
Протестируйте в Nodejs
Ниже приведена простая демонстрация, показывающая, как выполнить регистрацию службы, проверку работоспособности и приложение центра конфигурации между Node.js и Consul, что может хорошо применить теоретические знания, изложенные выше, на практике.
Пакет Консул
// consul.js
const Consul = require('consul');
class ConsulConfig {
constructor () {
const serviceName = 'consul-demo';
// 初始化 consul
this.consul = new Consul({
host: '192.168.6.128',
port: 8500,
promisify: true,
});
// 服务注册与健康检查配置
this.consul.agent.service.register({
name: serviceName,
address: '192.168.20.193', // 注意:192.168.20.193 为我本地的内网 ip,通过 ifconfig 查看
port: 3000,
check: {
http: 'http://192.168.20.193:3000/health',
interval: '10s',
timeout: '5s',
}
}, function(err, result) {
if (err) {
console.error(err);
throw err;
}
console.log(serviceName + ' 注册成功!');
})
}
async getConfig(key) {
const result = await this.consul.kv.get(key);
if (!result) {
return Promise.reject(key + '不存在');
}
return JSON.parse(result.Value);
}
// 读取 user 配置简单封装
async getUserConfig(key) {
const result = await this.getConfig('develop/user');
if (!key) {
return result;
}
return result[key];
}
// 更新 user 配置简单封装
async setUserConfig(key, val) {
const user = await this.getConfig('develop/user');
user[key] = val;
return this.consul.kv.set('develop/user', JSON.stringify(user))
}
}
module.exports = ConsulConfig;
написать файл запуска
// app.js
const http = require('http');
const ConsulConfig = require('./consul');
const consul = new ConsulConfig();
http.createServer(async (req, res) => {
const {url, method} = req;
// 测试健康检查
if (url === '/health') {
res.end('OK!');
}
// 测试动态读取数据
if (method === 'GET' && url === '/user/info') {
const user = await consul.getUserConfig();
res.end(`你好,我是 ${user.name} 今年 ${user.age}`);
}
// 测试数据更新
if (method === 'POST' && url === '/user') {
try {
await consul.setUserConfig('age', 18) // 将 age 更改为 18
res.end('OK!');
} catch (err) {
console.error(err);
res.end('ERROR!');
}
}
}).listen(3000, '192.168.20.193'); // 192.168.20.193 为我本地的内网 ip,通过 ifconfig 查看
тест интерфейса
Интерфейс проверки работоспособности
После того, как служба запущена и зарегистрирована в центре конфигурации Consul, этот интерфейс автоматически вызывается в соответствии с информацией о регистрации службы и проверке работоспособности, настроенной в файле consul.js.
$ curl http://192.168.20.193:3000/health
OK!
После успешной регистрации название нашего сервиса и результаты проверки работоспособности будут отображаться следующим образом:
Получить интерфейс информации о конфигурации$ curl http://192.168.20.193:3000/user/info
你好,我是 Jack 今年 20
Обновить информационный интерфейс конфигурации
$ curl -X POST http://192.168.20.193:3000/user
OK!
Восстановить конфигурацию после обновления
Видно, что после использования Consul в качестве центра конфигурации данные можно динамически изменять без перезапуска моего проекта.
$ curl http://192.168.20.193:3000/user/info
你好,我是 Jack 今年 18
Адрес исходного кода Github этого раздела:Node.js + Consul реализует регистрацию сервиса, проверку работоспособности, демо-центр конфигурации
Суммировать
Подводя итог, в этой статье в основном объясняется применение трех функциональных точек Консула в Node.js.После того, как клиент успешно зарегистрирует сервис, вы можете увидеть текущий список сервисов в консоли Консула. Функция проверки работоспособности может проверять доступность интерфейса, а также может выполнять мониторинг работы и обслуживания, а также предупреждать.Центр конфигурации очень удобен для наших разработчиков.С его помощью мы можем выполнить некоторую настройку во время выполнения.
Применение Consul не ограничивается тремя пунктами, описанными выше. Через Consul можно также делать балансировку нагрузки и распределенные блокировки. Чувствуете себя очень мощным? Эту функцию я узнал, когда смотрел Spring Cloud Consul раньше. Добро пожаловать в " Nodejs» «Technology Stack», и эти последующие практики также будут опубликованы позже.
Рекомендации по чтению
- Nodejs-Interview-Questions — Сосредоточьтесь на интервью и часто задаваемых вопросах Node.js
- Стек технологий Nodejs — руководство по стеку технологий для разработки и изучения Node.js
- Подпишитесь на официальный аккаунт «Nodejs Technology Stack», чтобы порекомендовать вам дополнительные учебные пособия, связанные с Node.js.
- стартерМООК