【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/

 

 

  • 41
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何遇mirror

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值