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集成EurekaSpring 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.ymlapplication.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可以简化服务间的调用过程。

请注意,本文提供的示例代码仅用于演示目的。在生产环境中使用时,请根据实际需求进行适当的调整和优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/127921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个基于Excel模板快速生成Excel文档的小工具

介绍 DocumentGenerator是一个Excel快速生成工具&#xff0c;目标以后还能实现Word、pdf等的文件的生成。该程序独立运行&#xff0c;可通过HTTP接口调用其生成接口。 典型使用场景为如下&#xff1a; 使用者编写模板文件使用者准备模板文件的填充JSON数据内容使用者通过网络…

网络套接字编程(二)

网络套接字编程(二) 文章目录 网络套接字编程(二)简易TCP网络程序服务端创建套接字服务端绑定IP地址和端口号服务端监听服务端运行服务端网络服务服务端启动客户端创建套接字客户端的绑定和监听问题客户端建立连接并通信客户端启动程序测试单执行流服务器的弊端 多进程版TCP网络…

CCF_A 计算机视觉顶会CVPR2024投稿指南以及论文模板

目录 CVPR2024官网&#xff1a; CVPR2024投稿链接&#xff1a; CVPR2024 重要时间节点&#xff1a; CVPR2024投稿模板: WORD: LATEX : CVPR2024_AuthorGuidelines CVPR2024投稿Topics&#xff1a; CVPR2024官网&#xff1a; https://cvpr.thecvf.com/Conferences/2024CV…

【Linux】常见指令以及具体其使用场景

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;随着博主的学习&#xff0c;博主掌握的技能也越来越多&#xff0c;今天又根据最近的学习开设一个新的专栏——Linux&#xff0c;相信Linux操作系…

【嵌入式开发学习02】esp32cam烧录human_face_detect实现人脸识别

Ubuntu20.04系统为esp32cam烧录human_face_detect 1. 下载esp-dl2. 安装esp-idf3. 烧录human_face_detect 如果使用ubuntu 16.04在后续的步骤中会报错如下&#xff0c;因为ubuntu 16.04不支持glibc2.23以上的版本&#xff08;可使用strings /lib/x86_64-linux-gnu/libc.so.6 | …

服务号改订阅号怎么弄

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;很多小伙伴想把服务号改为订阅号&#xff0c;但是不知道改了之后具体有什么作用&#xff0c;今天跟大家具体讲解一下。首先我们知道服务号一个月只能发四次文章&#xff0c;但是订阅号每天都可以发…

JVM——类的生命周期(加载阶段,连接阶段,初始化阶段)

目录 1.加载阶段2.连接阶段1.验证2.准备3.解析 3.初始化阶段4.总结 类的生命周期 1.加载阶段 ⚫ 1、加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 程序员可以使用Java代码拓展的不同的渠道。 ⚫ 2、类加载器在加载完类…

Spring MVC 的责任链模式

Spring MVC 框架使用了责任链模式来处理HTTP请求的流程。这个责任链模式主要包括多个拦截器&#xff08;Interceptor&#xff09;以及处理器&#xff08;Handler&#xff09;&#xff0c;它们协同工作以完成请求的处理和响应。以下是Spring MVC的责任链模式的工作原理和流程图&…

C++和 C 混合编程处理

原因是因为有很多功能是用 C 语言开发的&#xff0c;而 C是兼容 C 的&#xff0c;C应该能直接使用这些功能&#xff0c;那么我们把 C调用 C 实现的功能的这个做法&#xff0c;称为混合编程 但是用 C 开发的功能&#xff0c;很可能已经用 C 编译器编程成目标文件(或打包成库了)…

3.16每日一题(区间在现求定积分)

解法一&#xff1a; 1、二倍角化简&#xff0c;为了使用公式把x消去&#xff0c;令t2x&#xff0c;跟换区间 2、因为三角函数的几何性质&#xff0c;即sinx在0到Π上时对称区间&#xff0c;所以可以只计算[ 0 , Π/2 ]上的面积&#xff0c;最后乘2即可。 注&#xff1a;换元后记…

【服务器】Redis的安装及使用命令(Linux、Windows版)

目录 一、Redis简介 二、Redis安装 1、Linux版 1.1、下载 1.2、导入 1.3、解压 1.4、安装 1.5、修改文件 1.6、启动redis 1.7、测试 1.8、结束进程 1.9、修改密码访问 1.10、安装客户端工具&连接 2、Windows版 2.1、下载 2.2、安装 2.3、修改 2.4、连接 …

卷麻了,00后测试用例写的比我还好,简直无地自容......

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 如何编写测试用例&#xff1f; 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很是头疼&#xff0c;无法…

ffmpeg参数介绍

一&#xff1a;主要参数 -i 设定输入流。 支持本地和网络流 -f 设定输出格式(format)。 当未指定输出格式的情况&#xff0c;是以文件名的后缀为准 -ss 开始时间 -t 时间长度二&#xff1a;音频参数 -aframes 设置要输出的音频帧数 -b:a 设置音频码率 -ar 设定采样率 -ac 设定…

【从删库到跑路】详解MySQL数据库的视图以及相关操作

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出小吉的问题 文章目录 &#x1f384;视图介绍&#x1f384;视图特点&#x1f33a;基本操作⭐创建视图⭐查询…

【【深入浅出了解AXI4协议 - 2】】

深入浅出了解AXI4协议 - 2 AXI总线共有五个通道 read address channel write address channel read data channel write data channel write response channel 信息源 通过VALID 信号 来指示 通道中的 数据和 控制信号 什么时候 有效 目的源 READY 表示何时接收数据 读数据 …

Flask蓝图(Blueprint)

Flask 是一个流行的 Python Web 框架&#xff0c;它提供了蓝图&#xff08;Blueprint&#xff09;的概念&#xff0c;用于帮助组织和管理大型的 Web 应用程序。本文将介绍 Flask 蓝图的基本概念、如何使用蓝图构建应用程序&#xff0c;以及深入理解蓝图的一些高级特性。 1. 蓝图…

天拓四方分享:企业安全生产管控系统的构建、实施与优化

在当今社会&#xff0c;安全生产已成为各行各业的重要关注点。对于企业而言&#xff0c;构建和实施一套有效的安全生产管控系统是确保员工生命安全、提高工作效率以及维护企业稳定发展的关键。本文将深入探讨企业安全生产管控系统的构建、实施与优化。 一、企业安全生产管控系…

MIT6.5830 Lab1-GoDB实验记录(二)

MIT6.5830 Lab1-GoDB实验记录&#xff08;二&#xff09; – WhiteNights Site 标签&#xff1a;Golang, 数据库 接下来我们将完成tuple.go的缺失代码&#xff0c;并通过tuple_test.go的测试。 实验步骤 观察tuple.go 观察肯定是第一步&#xff0c;先打开tuple.go。 快300行代…

20 分钟搭建一个串流服务器

步骤1&#xff1a;准备Nginx RTMP容器 首先&#xff0c;您可以使用官方的Nginx RTMP Docker镜像来创建Nginx RTMP容器。运行以下命令&#xff1a; docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmp 这将在后台运行Nginx RTMP容器&#xff0c;将本地1935端…

解决POI的SXSSFSheet 创建excel下拉框,下拉框内容过多时不显示的问题

1. 复现 &#xff1a;使用POI导出带下拉框的excel文件&#xff0c;如果下拉框内容过多&#xff0c;下拉框变为了空 解决思路 &#xff1a; 导出时创建隐藏的sheet&#xff0c;下拉框的取值从隐藏的sheet中获取&#xff0c;下拉框显示正常 记录&#xff1a;因为网上的一些代码…