当前位置: 首页 > news >正文

服务发现: 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 中始终是最新的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vue3使用i18n实现国际化
  • linux系统使用yum安装mysql5.6版本的流程
  • 创意无限,尽在掌握:热门视频剪辑软件一览
  • TiDB-从0到1-TiCDC数据同步工具
  • RabbitMQ中如何通过死信交换机实现延时队列
  • C# 数组,List,Stack,Dictionary,Queue,LinkedList 如何选择
  • 基于YOLOv8的高效滑动验证码滑块缺口检测模型研究与应用
  • 洛谷P9235 [蓝桥杯 2023 省 A] 网络稳定性
  • 在Kibana中查询使用条件ES索引数据
  • 在Windows下安装设置VirtualBox
  • Vue3自定义hooks
  • C++ 内存布局 - Part4: 多继承与this指针调整
  • Deep-Live-Cam启动
  • Flink 流转表,表转流,watermark设置
  • pytest参数化多种用法总结
  • ----------
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Git同步原始仓库到Fork仓库中
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Javascript 原型链
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • PV统计优化设计
  • Python 反序列化安全问题(二)
  • RxJS: 简单入门
  • SpringCloud集成分布式事务LCN (一)
  • sublime配置文件
  • 代理模式
  • 构建工具 - 收藏集 - 掘金
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 聊一聊前端的监控
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #define
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (3)llvm ir转换过程
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Java)【深基9.例1】选举学生会
  • (Qt) 默认QtWidget应用包含什么?
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转)scrum常见工具列表
  • (转)Windows2003安全设置/维护
  • (转)用.Net的File控件上传文件的解决方案
  • .net SqlSugarHelper
  • .NetCore部署微服务(二)