服务发现: 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

相关文章

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁