服务发现: Node.js + Consul

2024-08-23 07:04
文章标签 服务 js 发现 node consul

本文主要是介绍服务发现: Node.js + Consul,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面是一个基于 Node.js 和 Consul 的完整示例,它展示了如何注册服务、获取服务列表并监听服务变化。

安装依赖

首先,需要安装 consul 包。如果还没有安装,可以通过以下命令安装:

npm install consul

完整的 Node.js + Consul 示例

以下示例包含了:

  1. 服务注册:将服务注册到 Consul。
  2. 服务列表获取:从 Consul 获取服务列表并缓存到内存中。
  3. 服务变化监听:使用 Consul 的 Watcher 机制监听服务变化并更新缓存。
const Consul = require('consul');
const consul = new Consul();let serviceCache = {};// 注册服务到 Consul
function registerService() {consul.agent.service.register({name: 'my-service',id: 'my-service-id', // 服务 ID(唯一标识符)address: '127.0.0.1',port: 3000,tags: ['api'],check: {http: 'http://127.0.0.1:3000/health',interval: '10s'}}, (err) => {if (err) {console.error('Failed to register service:', err);} else {console.log('Service registered');}});
}// 初始加载服务列表
function loadServices() {consul.catalog.service.list('my-service', (err, result) => {if (err) {console.error('Failed to load services:', err);} else {serviceCache = result.reduce((acc, service) => {acc[service.ServiceID] = service;return acc;}, {});console.log('Initial service cache:', serviceCache);}});
}// 监听服务变化
function watchServices() {consul.watch({method: consul.health.service.bind(consul.health, 'my-service', { passing: true }),filter: (data) => data}).on('change', (result) => {serviceCache = result.reduce((acc, service) => {acc[service.ServiceID] = service;return acc;}, {});console.log('Updated service cache:', serviceCache);});
}// 运行
function main() {registerService();loadServices();watchServices();
}main();

其他配置

  1. 健康检查端点:

确保服务有一个健康检查端点(例如 /health),Consul 将使用这个端点来检查服务的健康状态。可以在服务中实现一个简单的健康检查路由:

const express = require('express');
const app = express();app.get('/health', (req, res) => {res.send('Service is up and running');
});app.listen(3000, () => {console.log('Service running on port 3000');
});
  1. 启动 Consul:

确保已经启动了 Consul 服务器。可以使用以下命令启动 Consul 本地开发模式:

consul agent -dev

总结

上述代码展示了如何在 Node.js 应用中使用 Consul 注册服务、加载服务列表以及监听服务变化。可以根据自己的需求修改服务注册信息和监听的服务。

这篇关于服务发现: Node.js + Consul的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098683

相关文章

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/