SpringCloud Netflix Eureka

SpringCloud五大核心组件

  • 服务注册发现-Netflix Eureka
  • 配置中心 - Spring Cloud Config
  • 负载均衡-Netflix Ribbon
  • 断路器 - Netflix Hystrix
  • 路由(网关) - Netflix Zuul

Eureka

 Eureka 是 Netflix 出品的用于实现服务注册和发现的工具。 Spring Cloud 集成了 Eureka,并提供了开箱即用的支持。其中, Eureka 又可细分为 Eureka Server 和 Eureka Client。

实现原理

Eureka是SpringCloud中的注册中心,在Eureka管理了所有的微服务,服务的提供者和消费者都要在注册中心进行注册,当有消费者需要调用服务的时候,直接去注册中心进行拉取提供者的地址和端口号,以及服务名称等消息,然后消费者根据消息内容使用RestTemplate进行请求到对应的提供者,当下次在进项该调用时候,服务器会将上次拉取的消息缓存在服务器内,所以说,当第二次请求的时候,就算注册中心宕机也还是能正常访问的。

  • 提供者:要访问的目标服务器,提供数据
  • 消费者:请求访问的服务器,获取数据

1、Eureka服务正常启动,如果存在集群的话就要互相同步

2、Eureka客户端启动的时候,会根据配置的地址,将该服务注册到Eureka服务中,

3、Eureka客户端会每隔30s发送一个心跳给Eureka服务

4、Eureka服务在90s之内没有收到Eureka客户端的心跳,会认为客户端出现故障,然后从服务列表中移除,

5、在一段时间内,Eureka服务端统计到有大量的(85%)Eureka客户端没有发送心跳Eureka服务会认为此时,自己出现了网络故障,就会触发自我保护机制,不会再移除eureka客户端。当前不会把数据同步给其他的Eureka服务,但是对外还是提供服务的

6、如果网络恢复正常,自我保护机制关闭,接着将数据同步到其他的Eureka服务器

7、Eureka客户端要调用其他服务,需要先到Eureka服务器中拉取其他服务的信息,然后再缓存到本地,再根据客户端的负载均衡策略进行负载均衡

8、Eureka客户端会在一段时间内从Eureka服务端拉取最新的数据,更新本地的缓存数据。

9、Eureka客户端关闭后,Eureka就不会再发送心跳,Eureka服务就从自己的列表中移除

 

服务端搭建

1、创建一个SpringBoot工程,创建一个父工程,并且在父工程中指定SpringCloud的版本,并且将打包方式修改为pom

复制代码
<!--先导入springboot父依赖-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.2.RELEASE</version>
    <relativePath/>
</parent>

<!--指定SpringCloud的版本-->
<properties>
    <java.version>1.8</java.version>
    <spring.cloud.version>Hoxton.SR10</spring.cloud.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring.cloud.version}</version>
            <type>pom</type>  
            <scope>import</scope>
    </dependency>
    </dependencies>
</dependencyManagement>
复制代码

 

2、创建一个SpringBoot子工程,导入EurekaServer的依赖

复制代码
<dependencies>
    <!-- spring begin -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!-- spring end -->
</dependencies>
复制代码

 

3、application.yml文件的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
server:
  port: 8761 # 指定端口
spring:
  application:
    name: eureka-server # 应用名
 
# eureka 配置
eureka:
  client:
    register-with-eureka: true # 是否注册到Eureka,默认true
    fetch-registry: false # 是否从Eureka拉取地址列表
    service-url:
      defaultZone: http://localhost:8761/eureka # 需要进行消息注册的请求地址

4、启动类添加注解@EnableEurekaServer 表示该微服务为一个消息注册中心的服务端

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

 

5、启动服务后,访问 http://localhost:8761/

 

 客户端搭建

1、再创建一个SpringBoot子工程,导入EurekaClient的依赖

复制代码
<dependencies>
        <!--eureka客户端的依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>
复制代码

 2、编写配置文件application.yml ,注意,注册的名称不要使用"_" 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 指定端口
server:
  port: 8080
spring:
  application:
    # 应用名
    name: order-service
 
# eureka 配置
eureka:
  client:
    # 注册中心服务地址
    service-url:
      defaultZone: http://localhost:8761/eureka

反是有以上配置的微服务(模块)都属于客户端,在启动的时候会自动去注册中心注册服务

posted @   danielzzz  阅读(60)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示