Eureka介绍和使用
Eureka介绍和使用
- 一、基本介绍
- 1. Eureka是什么?
- 2. Eureka的作用
- 3. 常用使用场景
- 4. Eureka的工作原理
- 5. Eureka的优点
- 6. 使用Eureka的注意事项
- 二、eureka配置项解释
- 1. eureka.instance.hostname
- 2. eureka.instance.appname
- 3. eureka.instance.instance-id
- 4. eureka.client.serviceUrl.defaultZone
- 5. eureka.server.enable-self-preservation
- 6.eureka.client.registerWithEureka
- 7.eureka.client.fetchRegistry
- 三、Eureka使用详解及示例代码
- 1. 环境准备
- 2. 创建Eureka Server
- 2.1. 创建Spring Boot项目
- 2.2. 配置Eureka Server
- 2.3. 启动Eureka Server
- 3. 创建Eureka Client
- 3.1. 添加Eureka Client依赖
- 3.2. 配置Eureka Client
- 3.3. 注册服务
- 4. 使用Eureka进行服务发现
- 4.1. 在另一个Eureka Client中发现服务
- 4.2. 使用`@FeignClient`进行服务调用
- 5. 总结
Eureka:Netflix的微服务注册中心
随着微服务的流行,服务的注册与发现成为了分布式系统中的关键组件。Netflix的Eureka是这一领域中的翘楚,为微服务架构提供了强大的服务治理功能。本文将详细介绍Eureka是什么,它的作用,常用的使用场景以及工作原理。
一、基本介绍
1. Eureka是什么?
Eureka是Netflix开发的一个开源的服务注册与发现框架。在微服务架构中,每个服务都需要知道其他服务的位置,而Eureka就提供了这样一个中心化的注册中心,让所有的服务都能够找到彼此。
2. Eureka的作用
- 服务注册:每个微服务在启动时,都会在
Eureka
中进行注册,告诉Eureka自己的网络位置。 - 服务发现:其他微服务需要调用某个服务时,会向Eureka询问该服务的位置,然后Eureka会返回该服务的网络地址。
- 健康检查:
Eureka
客户端会定时发送心跳到Eureka Server
,以此证明自己的“健康”状态。如果Eureka Server在一段时间内没有收到某个服务的心跳,那么它会认为该服务已经宕机,将其从服务列表中移除。 - 负载均衡:Eureka配合Ribbon或其他负载均衡工具,可以实现客户端的负载均衡。
3. 常用使用场景
- 任何使用微服务架构的应用都可以使用Eureka作为服务注册与发现的解决方案。
- 在云环境中,由于服务的IP地址经常变动,使用Eureka可以动态地获取服务地址。
- 当系统中存在大量的微服务,并且需要频繁地互相调用时,Eureka能够提供高效的服务发现机制。
4. Eureka的工作原理
- 服务注册:当微服务实例启动后,会向
Eureka Server
发送注册请求,携带自己的IP和端口等信息。Eureka Server接收到注册请求后,会将该服务的信息存储到注册表中。 - 服务续约:为了避免因为网络分区导致的服务不可用问题,Eureka客户端会定时向Eureka Server发送心跳来续约自己的“租期”。
- 服务获取:当其他服务需要调用某个服务时,会向Eureka Server请求获取该服务的网络地址。Eureka Server会从注册表中查找该服务的信息,并返回给请求者。
- 服务下线:当微服务实例关闭或异常时,它会向Eureka Server发送下线请求。Eureka Server接收到请求后,会将该服务从注册表中移除。
5. Eureka的优点
- 高可用性:
Eureka Server
设计为高可用性,每个实例都能平等地提供服务注册和发现功能。多个Eureka Server
可以相互复制注册表信息,形成集群,进一步提高系统的可用性。 - 自我保护模式:在网络分区故障发生(网络不稳定)期间,
Eureka
客户端和Eureka Server
之间无法正常通信,Eureka Server将会切换到自我保护模式。在这种模式下,Eureka Server会保护服务注册表中的信息,不再删除服务注册表中的数据,等到网络故障恢复后,再自动退出自我保护模式。 - 与Spring Cloud集成:
Eureka
与Spring Cloud
集成良好,为Spring Cloud微服务架构提供了服务注册与发现的解决方案。通过简单的配置,就能将Spring Boot构建的微服务应用注册到Eureka Server。
6. 使用Eureka的注意事项
- 合理设置服务续约间隔:服务续约间隔决定了服务向Eureka Server发送心跳的频率。这个值设置得过小会增加网络负担,设置得过大可能会导致服务在Eureka Server上过早被标记为不可用。
- 确保Eureka Server的高可用:Eureka Server的高可用是保证整个系统稳定运行的关键。在生产环境中,通常建议部署多个Eureka Server实例,形成集群。
- 注意网络分区问题:网络分区问题可能导致服务无法正常续约,进而被Eureka Server标记为不可用。在这种情况下,需要尽快解决网络问题,或者考虑使用Eureka的自我保护模式。
二、eureka配置项解释
Eureka的配置文件设置对于Eureka的服务注册与发现功能至关重要。下面是Eureka的一些关键配置项以及它们的解释和配置方法:
1. eureka.instance.hostname
此设置用于配置Eureka实例的主机名。您可以将其设置为本地主机名或指定的主机名。
配置示例:
eureka:instance:hostname: localhost
2. eureka.instance.appname
此设置用于配置在Eureka服务中注册的应用名称。
配置示例:
eureka:instance:appname: my-service
3. eureka.instance.instance-id
此设置用于配置Eureka实例的唯一ID。您可以根据需要使用默认设置或自定义唯一ID。
配置示例:
eureka:instance:instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
4. eureka.client.serviceUrl.defaultZone
此设置用于配置Eureka Server的地址。您需要指定Eureka Server的主机名和端口。
配置示例:
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
5. eureka.server.enable-self-preservation
这个设置用于开启或关闭Eureka Server的自我保护模式。当设置为true时,即使Eureka Server在短时间内丢失过多客户端,也不会删除失去连接的客户端。这有助于提高系统的可用性。
配置示例:
eureka:server:enable-self-preservation: false
6.eureka.client.registerWithEureka
这个配置用来决定Eureka客户端是否向Eureka Server注册自己。如果设置为true
,该客户端会向Eureka Server注册自己的信息,这样其他服务就可以通过Eureka Server找到它。如果设置为false
,则该客户端不会注册到Eureka Server。
示例配置:
eureka:client:registerWithEureka: false
通常情况下,Eureka Server会将此值设置为false
,因为Eureka Server不需要向自己注册。而一般的Eureka Client应将其设置为true
以完成服务注册。
7.eureka.client.fetchRegistry
这个配置用来决定Eureka客户端是否从Eureka Server获取服务注册信息。如果设置为true
,该客户端会从Eureka Server获取服务注册表的信息,这样它就可以知道其他可用的服务实例。如果设置为false
,则该客户端不会从Eureka Server获取服务注册表信息。
示例配置:
eureka:client:fetchRegistry: false
对于Eureka Server,通常将此值设置为false
,因为它不需要获取自己的服务注册表信息。而对于需要发现其他服务的Eureka Client,应将其设置为true
。
这两个配置项在Eureka的客户端和服务器角色中起着重要的作用,正确地配置它们可以确保服务的正确注册和发现。在配置时需要根据实例的角色(服务器或客户端)和需求来选择合适的值。
以上就是Eureka的一些重要配置项及其配置方法。请注意,这些配置项通常需要在您的Spring Boot应用的application.yml
或application.properties
文件中进行设置。具体的配置项可能会因您的实际需求和Eureka的版本而有所不同,所以请根据实际情况进行调整。
三、Eureka使用详解及示例代码
本文将指导您如何使用Eureka进行服务注册与发现。我们将通过示例代码,展示如何在Spring Boot应用中集成Eureka。
1. 环境准备
首先,确保您已经安装了以下环境:
- JDK 1.8 或更高版本
- Maven 3.0 或更高版本
- Spring Boot 2.x
2. 创建Eureka Server
首先,我们创建一个Eureka Server。这将作为服务的注册中心。
2.1. 创建Spring Boot项目
创建一个新的Spring Boot项目,并在pom.xml
中添加Eureka Server的依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.2. 配置Eureka Server
在application.yml
中配置Eureka Server:
server:port: 8761
eureka:instance:hostname: localhost #此设置用于配置Eureka实例的主机名。您可以将其设置为本地主机名或指定的主机名。client:registerWithEureka: false # 这个配置用来决定Eureka客户端是否向Eureka Server注册自己。如果设置为true,该客户端会向Eureka Server注册自己的信息,这样其他服务就可以通过Eureka Server找到它。如果设置为false,则该客户端不会注册到Eureka Server。通常情况下,Eureka Server会将此值设置为false,因为Eureka Server不需要向自己注册。而一般的Eureka Client应将其设置为true以完成服务注册。fetchRegistry: falseserviceUrl: # 此设置用于配置Eureka Server的地址。需要指定Eureka Server的主机名和端口。defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
2.3. 启动Eureka Server
在主类上添加@EnableEurekaServer
注解,并启动应用:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
3. 创建Eureka Client
接下来,我们创建一个Eureka Client,这将是我们要注册的服务。
3.1. 添加Eureka Client依赖
在另一个Spring Boot项目的pom.xml
中添加Eureka Client的依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.2. 配置Eureka Client
在application.yml
中配置Eureka Client:
server:port: 8080
spring:application:name: my-service # 此设置用于配置在Eureka服务中注册的应用名称。
eureka:client:serviceUrl: # 此设置用于配置Eureka Server的地址。需要指定Eureka Server的主机名和端口。defaultZone: http://localhost:8761/eureka/
3.3. 注册服务
在主类上添加@EnableEurekaClient
注解,并启动应用:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaClientApplication.class, args);}@GetMapping("/hello")public String hello() {return "Hello from Eureka Client!";}
}
现在,您已经成功创建了一个Eureka Server和一个Eureka Client。启动Eureka Server,然后启动Eureka Client,您将看到Client成功注册到Server上。通过访问Eureka Server的管理界面(默认地址:http://localhost:8761/),您将看到已注册的服务列表。同时,其他服务也可以通过Eureka Server发现这个Client服务,并进行调用。
4. 使用Eureka进行服务发现
在微服务架构中,服务之间的调用经常是动态的,我们不知道具体要调用哪个实例,这时候就需要Eureka的服务发现功能。
4.1. 在另一个Eureka Client中发现服务
假设我们有一个名为my-service-consumer
的另一个Eureka Client,它需要调用上面创建的my-service
。
首先,确保my-service-consumer
也添加了Eureka Client的依赖,并进行了相应的配置。
4.2. 使用@FeignClient
进行服务调用
Spring Cloud提供了Feign作为HTTP客户端进行服务间的调用,它基于Ribbon和Hystrix,并整合了Eureka,简化了服务调用的过程。
在my-service-consumer
中,创建一个接口并使用@FeignClient
注解:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;@FeignClient(value = "my-service")
public interface MyServiceClient {@GetMapping("/hello")String hello();
}
这里,value = "my-service"
表示要调用的服务的名称,它应该与在Eureka中注册的服务名称相匹配。
接着,你可以在my-service-consumer
的任何类中注入并使用这个接口:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConsumerController {private final MyServiceClient myServiceClient;@Autowiredpublic ConsumerController(MyServiceClient myServiceClient) {this.myServiceClient = myServiceClient;}@GetMapping("/call-my-service")public String callMyService() {return myServiceClient.hello(); // 这里将调用my-service的/hello接口}
}
5. 总结
通过上面的示例,我们展示了如何在Spring Boot应用中集成Eureka,并进行服务注册与发现。在实际应用中,您可能会有多个Eureka Server实例和多个Eureka Client实例。确保在生产环境中适当配置这些实例以保证高可用性。同时,使用Feign可以简化服务间的调用过程。
请注意,本文提供的示例代码仅用于演示目的。在生产环境中使用时,请根据实际需求进行适当的调整和优化。
相关文章:
Eureka介绍和使用
Eureka介绍和使用 一、基本介绍1. Eureka是什么?2. Eureka的作用3. 常用使用场景4. Eureka的工作原理5. Eureka的优点6. 使用Eureka的注意事项 二、eureka配置项解释1. eureka.instance.hostname2. eureka.instance.appname3. eureka.instance.instance-id4. eureka.client.se…...
Incremental Object Detection via Meta-Learning【论文解析】
Incremental Object Detection via Meta-Learning 摘要1 介绍2 相关工作3 方法3.1 问题描述3.2元学习梯度预处理3.3增量式目标检测器摘要 摘要:在真实世界的情境中,目标检测器可能会不断遇到来自新类别的物体实例。当现有的目标检测器应用于这种情景时,它们对旧类别的性能会…...

AI大模型时代网络安全攻防对抗升级,瑞数信息变革“下一代应用与数据安全”
AI与大模型技术加速普及,安全领域也在以创新视角聚焦下一代应用安全WAAP变革,拓展新一代数据安全领域。近日瑞数信息重磅发布了瑞数全新API扫描器、API安全审计、数据安全检测与应急响应系统及分布式数据库备份系统四大新品。此次发布在延续瑞数信息Bot自…...

后端接口接收对象和文件集合,formdata传递数组对象
0 问题 后端接口需要接收前端传递过来的对象和文件集合;对象中存在数组对象 1 前端和后端 前端只能使用formdata来传递参数,后端不使用RequestBody注解 2 formdata传递数组对象 2.1 多个参数对象数组 addForm: {contactInfo: [{contactPerson: ,…...
python json包
当前大语言模型比较火热,很多数据是以json格式进行数据传递的。python包中的json包就是一个处理Json格式数专业包。 本文主要介绍这个包中的四个函数,dump,dumps,load,loads 序列化为Json dump:将Python对象序列化为Json文件 案例 我们有如…...

基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery
基于 NGram 分词,优化 Es 搜索逻辑,并深入理解了 matchPhraseQuery 与 termQuery 前言问题描述排查索引库分词(发现问题)如何去解决这个问题?IK 分词器NGram 分词器使用替换 NGram 分词器后进行测试matchPhraseQuery 查…...

PivotNet:Vectorized Pivot Learning for End-to-end HD Map Construction
参考代码:BeMapNet。PS:代码暂未放出,关注该仓库动态 动机和主要贡献 在MapTR系列的算法中将单个车道线建模为固定数量的有序点集(对应下图Evenly-based),这样的方式对于普通道路场景具备一定适应性。但是…...

阿里云安全恶意程序检测
阿里云安全恶意程序检测 赛题理解赛题介绍赛题说明数据说明评测指标 赛题分析数据特征解题思路 数据探索数据特征类型数据分布箱型图 变量取值分布缺失值异常值分析训练集的tid特征标签分布测试集数据探索同上 数据集联合分析file_id分析API分析 特征工程与基线模型构造特征与特…...

Xcode中如何操作Git
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…...

浅述边缘计算场景下的云边端协同融合架构的应用场景示例
云计算正在向一种更加全局化的分布式节点组合形态进阶,而边缘计算是云计算能力向边缘侧分布式拓展的新触角。随着城市建设进程加快,海量设备产生的数据,若上传到云端进行处理,会对云端造成巨大压力。如果利用边缘计算来让云端的能…...
C++中禁止在栈中实例化的类
C中禁止在栈中实例化的类 栈空间通常有限。如果您要编写一个数据库类,其内部结构包含数 TB 数据,可能应该禁止在栈上实例化它,而只允许在自由存储区中创建其实例。为此,关键在于将析构函数声明为私有的: class Monst…...
MsgPack和Protobuf
MsgPack可以在C下序列化类,Protobuf只能在C#下序列化类 Cocos Creator安装msgpack-lite 项目文件夹执行 rpm -i msgpack-lite...

自定义类型联合体
目录 联合体联合体类型的声明联合体的特点相同成员的结构体和联合体对比联合体大小的计算联合体的应用联合的一个练习 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸…...
【Shell 系列教程】Shell printf 命令( 六)
文章目录 往期回顾Shell printf 命令printf 的转义序列 往期回顾 【Shell 系列教程】shell介绍(一)【Shell 系列教程】shell变量(二)【Shell 系列教程】shell数组(三)【Shell 系列教程】shell基本运算符&a…...

2022年电工杯数学建模B题5G网络环境下应急物资配送问题求解全过程论文及程序
2022年电工杯数学建模 B题 5G网络环境下应急物资配送问题 原题再现: 一些重特大突发事件往往会造成道路阻断、损坏、封闭等意想不到的情况,对人们的日常生活会造成一定的影响。为了保证人们的正常生活,将应急物资及时准确地配送到位尤为重要…...
git reflog 恢复git reset --hard 回退的内容
首先使用 git reflog 查看处理的历史,历史是由新到旧排列的,找到回退前的commit的id,找的过程可以只关注HEAD的部分,HEAD括号中的值越大越旧,越小越新。 找到后执行以下命令 git reset --hard 你的commit_id 然后…...

kali Linux中更换为阿里镜像源
准备: kali Linux 阿里源链接 deb kali安装包下载_开源镜像站-阿里云 kali-rolling main non-free contrib deb-src kali安装包下载_开源镜像站-阿里云 kali-rolling main non-free contrib 配置: 打开kali 终端输入:sudo nano /etc/apt…...

【每日一题】移除链表元素(C语言)
移除链表元素,链接奉上 目录 思路:代码实现:链表题目小技巧: 思路: 在正常情况: 下我们移除链表元素时,需要该位置的前结点与后节点, 在特别情况时: 例如 我们发现&…...

stm32 ADC
目录 简介 stm32的adc 框图 ①电压输入范围 ②输入通道 编辑③ADC通道 ④ADC触发 ⑤ADC中断 ⑥ADC数据 ⑦ADC时钟 ADC的四种转换模式 hal库代码 标准库代码 简介 自然界的信号几乎都是模拟信号,比如光亮、温度、压力、声音,而为了方便存储、…...

linux网络服务综合项目
前期环境配置 #主要写了192.168.146.130的代码,131的配置代码和其一样 [rootserver ~]# nmtui #通过图形化界面修改ens160的ip 192.168.146.130 [rootserver ~]# hostnamectl set-hostname Server-Web #修改130主机名…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...