当前位置:   article > 正文

【Eureka】Eureka介绍与使用详解,超全!!!

eureka

目录

一、Eureka介绍

Eureka的作用

为什么使用Eureka

服务治理

服务注册

服务发现

Eureka的服务端与客户端

Eureka服务端

Eureka客户端

二、搭建Eureka服务模块

1. 创建Eureka Server项目

2. pom.xml

3. application.yml

4. 主程序

5. 修改host文件

三、搭建 Eureka 服务提供者 (Service Provider)

修改 item-service 模块

pom.xml

3.application.yml 添加 Eureka 注册配置

4.主程序添加服务注册发现客户端

5.启动并查看服务注册情况

四、Eureka 的使用

服务提供者的“高可用”

五、Eureka 的高可用



一、Eureka介绍

以下内容来自百度百科

     Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

    Eureka包含两个组件:Eureka Server和Eureka Client。

    Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

    Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器

在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

     Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性

Eureka的作用

    Eureka是一款由Netflix开发的基于Java的服务发现框架,主要用于微服务架构中的服务注册与发现。在分布式系统中,服务实例可能频繁地启动和关闭,传统的静态配置方式难以应对这种动态变化。Eureka通过维护服务实例的注册表,解决了服务位置的不确定性问题,使得服务调用方能够通过服务名称找到服务提供方。

为什么使用Eureka
  • 服务动态管理:Eureka能够动态地管理服务实例的注册和注销,即使服务实例频繁上下线也能保持服务间的正常通信。
  • 容错机制:Eureka具有自我保护机制,在网络分区的情况下,服务实例不会被立即注销,从而保证了系统的高可用性。
  • 简化服务发现:Eureka提供了简单易用的API,使得服务发现变得非常容易。
  • 易于集成:Eureka与Spring Cloud紧密结合,可以轻松地集成到Spring Boot项目中。
服务治理

     服务治理是指对服务实例进行管理和监控的过程,包括但不限于服务注册、服务发现、负载均衡、故障恢复等。Eureka通过其服务端和客户端两部分实现了服务治理的关键功能。

服务注册

     服务注册是指服务实例向服务注册中心(如Eureka Server)注册自身的过程。在注册时,服务实例会提供必要的元数据,比如服务地址、端口、健康检查路径等信息。这些信息将被Eureka Server存储起来,以便后续的服务发现。

服务发现

      服务发现是指服务调用方根据服务名称查找服务实例的过程。Eureka Client可以从Eureka Server获取服务实例列表,并从中选择合适的实例进行调用。服务发现过程是透明的,开发者只需要关注业务逻辑即可。

Eureka的服务端与客户端

Eureka服务端

Eureka服务端的主要职责是维护服务实例的注册表,包括以下功能:

  • 服务实例注册:接收来自客户端的服务实例注册请求,并存储服务实例的信息。
  • 服务实例更新:接收服务实例的心跳信号,以确定服务实例是否仍然活跃。
  • 服务实例注销:如果长时间没有收到某个服务实例的心跳,则将其从注册表中移除。
  • 服务实例查询:提供接口供客户端查询服务实例列表。
Eureka客户端

Eureka客户端则通常部署在每个服务实例上,其功能包括:

  • 服务注册:在启动时向Eureka Server注册服务实例,并定期发送心跳信号。
  • 服务发现:从Eureka Server获取服务实例列表,并根据负载均衡策略选择合适的服务实例进行调用。
  • 自我保护:在网络不稳定的情况下,Eureka客户端可以进入自我保护模式,避免不必要的服务实例注销。

二、搭建Eureka服务模块

1. 创建Eureka Server项目

创建一个新的Spring Boot项目,命名为eureka-server

2. pom.xml

在项目的pom.xml文件中添加Eureka Server依赖:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.example</groupId>
  6. <artifactId>eureka-server</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>Eureka Server</name>
  9. <description>Eureka Server for Service Discovery</description>
  10. <properties>
  11. <java.version>17</java.version>
  12. </properties>
  13. <dependencies>
  14. <!-- Spring Boot Starter Web -->
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-web</artifactId>
  18. </dependency>
  19. <!-- Eureka Server dependency -->
  20. <dependency>
  21. <groupId>org.springframework.cloud</groupId>
  22. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  23. </dependency>
  24. </dependencies>
  25. <build>
  26. <plugins>
  27. <plugin>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-maven-plugin</artifactId>
  30. </plugin>
  31. </plugins>
  32. </build>
  33. </project>
3. application.yml

配置Eureka Server的application.yml文件:

  1. spring:
  2. application:
  3. name: eureka-server
  4. server:
  5. port: 8761
  6. eureka:
  7. instance:
  8. hostname: localhost
  9. client:
  10. registerWithEureka: false
  11. fetchRegistry: false
  12. serviceUrl:
  13. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
4. 主程序

创建主程序EurekaServerApplication.java

  1. package com.example.eurekaserver;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
  5. @SpringBootApplication
  6. @EnableEurekaServer
  7. public class EurekaServerApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(EurekaServerApplication.class, args);
  10. }
  11. }
5. 修改host文件

为了支持多个服务实例在同一台机器上的测试,可以在C:\Windows\System32\drivers\etc\hosts(Windows)或/etc/hosts(Linux/MacOS)中添加以下行:

  1. 127.0.0.1 localhost
  2. 127.0.0.1 eureka-server
  1. 这样可以在本地环境中使用域名访问 Eureka Server。

三、搭建 Eureka 服务提供者 (Service Provider)

  1. 修改 item-service 模块
     

    假设你有一个名为 item-service 的模块,现在需要将其改造为 Eureka 服务提供者。

  2. pom.xml
     

    item-servicepom.xml 文件中添加 Eureka Client 的依赖。

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  5. </dependency>
  6. </dependencies>
3.application.yml 添加 Eureka 注册配置

application.yml 文件中添加 Eureka Client 的配置。

  1. spring:
  2. application:
  3. name: item-service
  4. eureka:
  5. client:
  6. service-url:
  7. defaultZone: http://eureka-server:8761/eureka/
4.主程序添加服务注册发现客户端

item-service 的主类中添加 @EnableEurekaClient 注解。

  1. @SpringBootApplication
  2. @EnableEurekaClient
  3. public class ItemServiceApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ItemServiceApplication.class, args);
  6. }
  7. }
5.启动并查看服务注册情况
  • 启动 Eureka Server 和 item-service
  • 打开浏览器访问 Eureka Server 的控制台页面(默认为 http://localhost:8761/ 或 http://eureka-server:8761/)。
  • 查看服务实例列表,确认 item-service 是否已经成功注册。

四、Eureka 的使用

服务提供者的“高可用”

为了实现服务提供者的高可用,可以通过启动多个相同的实例来实现。这里以启动两个 item-service 实例为例。

  1. 配置启动参数

    application.yml 文件中,可以为每个实例设置不同的端口号。

  1. server:
  2. port: 8081 # 第一个实例

对于第二个实例:

  1. server:
  2. port: 8082 # 第二个实例
  1. 启动两个服务,并查看注册信息

     

    分别启动两个 item-service 实例,然后通过 Eureka Server 控制台页面查看服务实例的注册信息。确认两个实例都被成功注册。

五、Eureka 的高可用

为了实现 Eureka Server 的高可用,可以部署多个 Eureka Server 实例,并让它们互相注册,形成集群。

  1. 添加两个配置 yml 文件

     

    创建两个配置文件,分别为 application-eureka1.ymlapplication-eureka2.yml

     

    application-eureka1.yml:

    1. spring:
    2. application:
    3. name: eureka-server
    4. server:
    5. port: 8761
    6. eureka:
    7. instance:
    8. hostname: eureka1
    9. client:
    10. register-with-eureka: true
    11. fetch-registry: true
    12. service-url:
    13. defaultZone: http://eureka2:8762/eureka/

    application-eureka2.yml:

    1. spring:
    2. application:
    3. name: eureka-server
    4. server:
    5. port: 8762
    6. eureka:
    7. instance:
    8. hostname: eureka2
    9. client:
    10. register-with-eureka: true
    11. fetch-registry: true
    12. service-url:
    13. defaultZone: http://eureka1:8761/eureka/

    配置启动参数

    在命令行中分别使用不同的配置文件启动两个 Eureka Server 实例。

    对于第一个实例:

    java -jar eureka-server.jar --spring.profiles.active=eureka1

    对于第二个实例:

    java -jar eureka-server.jar --spring.profiles.active=eureka2
  2. 启动两台服务器,查看注册信息

    启动两个 Eureka Server 实例后,通过访问任何一个 Eureka Server 的控制台页面(例如 http://localhost:8761/http://localhost:8762/),可以看到两个 Eureka Server 实例相互注册的情况。

  3. 修改 item-service 服务的 yml

    修改 item-serviceapplication.yml 文件,使其能够注册到两个 Eureka Server 实例上。

    1. spring:
    2. application:
    3. name: item-service
    4. eureka:
    5. client:
    6. service-url:
    7. defaultZone: http://eureka1:8761/eureka/,http://eureka2:8762/eureka/

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/1016583
推荐阅读
相关标签
  

闽ICP备14008679号