服务发现: Node.js + Eureka

2024-08-24 06:28
文章标签 服务 js 发现 node eureka

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

基于 Node.js 和 Eureka 的完整示例,涵盖了服务的注册、获取服务列表、监听服务变化,以及定期更新健康状态到 Eureka。

安装依赖

首先,安装所需的 Node.js 包,包括 Eureka 的客户端库和一个 HTTP 请求库:

npm install eureka-js-client express axios

完整示例代码

以下示例代码展示了如何注册服务到 Eureka,获取服务列表,定期更新健康状态,以及监听服务变化(通过轮询获取服务列表变化)。

const express = require('express');
const Eureka = require('eureka-js-client').Eureka;
const axios = require('axios');const app = express();
const port = 3000;const eurekaClient = new Eureka({// Eureka server's host and port// Replace with your Eureka server addressinstance: {app: 'my-service',instanceId: 'my-service-id',hostName: 'localhost',ipAddr: '127.0.0.1',port: {'$': port,'@enabled': true},vipAddress: 'my-service',secureVipAddress: 'my-service',dataCenterInfo: {'@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',name: 'MyOwn'},statusPageUrl: `http://localhost:${port}/info`,healthCheckUrl: `http://localhost:${port}/health`,homePageUrl: `http://localhost:${port}/`,leaseInfo: {renewalIntervalInSecs: 30,durationInSecs: 90}},eureka: {// Eureka server URL// Replace with your Eureka server addresshost: 'localhost',port: 8761,servicePath: '/eureka/apps/'}
});// 注册服务到 Eureka
function registerService() {eurekaClient.start((error) => {if (error) {console.error('Failed to register service:', error);} else {console.log('Service registered with Eureka');startHealthCheck();loadServices();}});
}// 健康检查路由
app.get('/health', (req, res) => {res.send('Service is up and running');
});// 启动服务
app.listen(port, () => {console.log(`Service running on port ${port}`);registerService();
});// 定期更新健康状态到 Eureka
function startHealthCheck() {setInterval(async () => {try {await axios.get(`http://localhost:${port}/health`);console.log('Service health check passed');} catch (error) {console.error('Service health check failed:', error);}}, 30000); // 每30秒检查一次
}// 获取服务列表
async function loadServices() {try {const response = await axios.get(`http://localhost:8761/eureka/apps/my-service`);const services = response.data;console.log('Service list:', services);} catch (error) {console.error('Failed to get service list:', error);}
}// 监听服务变化
function watchServiceChanges() {// 通过定时轮询服务列表setInterval(async () => {try {const response = await axios.get(`http://localhost:8761/eureka/apps/my-service`);const services = response.data;console.log('Updated service list:', services);} catch (error) {console.error('Failed to get updated service list:', error);}}, 30000); // 每30秒轮询一次
}// 启动服务变化监听
watchServiceChanges();
说明
  1. 健康检查端点:
  • 使用 Express.js 创建了一个 /health 路由,用于检查服务是否正常。
  1. 注册服务:
  • 使用 eureka-js-client 库将服务注册到 Eureka。Eureka 客户端配置包括服务的基本信息,如 app 名称、端口、健康检查 URL 等。
  1. 定期更新健康状态:
  • 使用 setInterval 每30秒检查一次服务的健康状态,确保 Eureka 服务器上的服务状态是最新的。
  1. 获取服务列表:
  • 通过 HTTP 请求从 Eureka 获取服务列表,并打印到控制台。
  1. 监听服务变化:
  • 通过定时轮询服务列表的方式来监听服务变化。虽然 Eureka 没有内置的事件机制来监听服务变化,但轮询可以有效地检测服务的变化。

启动 Eureka 服务器

确保你已经启动了 Eureka 服务器。你可以使用 Spring Boot 来运行 Eureka 服务器,或者使用现有的 Eureka 实例。如果你使用 Spring Boot,可以通过以下命令启动 Eureka 服务器:

mvn spring-boot:run

总结

这个示例展示了如何在 Node.js 应用中实现服务的注册、健康检查、获取服务列表和监听服务变化。通过这种方式,你可以确保服务列表和健康状态在 Eureka 中始终是最新的。

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



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

相关文章

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/