Bootstrap

【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依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>eureka-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Eureka Server</name>
    <description>Eureka Server for Service Discovery</description>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- Spring Boot Starter Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Eureka Server dependency -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
3. application.yml

配置Eureka Server的application.yml文件:

spring:
  application:
    name: eureka-server
server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
4. 主程序

创建主程序EurekaServerApplication.java

package com.example.eurekaserver;

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);
    }

}
5. 修改host文件

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

127.0.0.1       localhost
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 的依赖。

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

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

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

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

@SpringBootApplication
@EnableEurekaClient
public class ItemServiceApplication {

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

四、Eureka 的使用

服务提供者的“高可用”

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

  1. 配置启动参数

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

server:
  port: 8081 # 第一个实例

对于第二个实例:

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

     

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

五、Eureka 的高可用

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

  1. 添加两个配置 yml 文件

     

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

     

    application-eureka1.yml:

    spring:
      application:
        name: eureka-server
    server:
      port: 8761
    eureka:
      instance:
        hostname: eureka1
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://eureka2:8762/eureka/

    application-eureka2.yml:

    spring:
      application:
        name: eureka-server
    server:
      port: 8762
    eureka:
      instance:
        hostname: eureka2
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          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 实例上。

    spring:
      application:
        name: item-service
    eureka:
      client:
        service-url:
          defaultZone: http://eureka1:8761/eureka/,http://eureka2:8762/eureka/

 

 

;