当前位置:   article > 正文

【Spring Cloud】Eureka:重点知识、完整项目实战:注册服务测试,自我保护机制,配置监控信息,获取微服务的信息_eureka项目

eureka项目

1 Eureka 重点知识

Eureka是Netflix开发的服务发现框架,(作为注册中心的角色)本身是一个基于REST的服务,(应用举例:在AWS中,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的)。 SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。而可以与之对比的是,在 Dubbo 中,官方推荐的服务注册与发现方式是使用 Zookeeper(也是作为注册中心的角色),此方式的具体知识可参考之前文章:SpringBoot集成 Dubbo + Zookeeper + Dubbo Admin:服务注册发现实战与详细步骤

Netflix Eureka 是 Netflix 的一个子模块,也是核心模块之一。同时 Netflix Eureka 是一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移

Netflix 在设计Eureka 时,遵循的就是 CAP 原则,CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
在这里插入图片描述

Eureka 采用了 C-S 的架构设计,EurekaServer 作为服务注册功能的服务器,作为服务注册中心。

Spring Cloud Eureka 是对 Netflix Eureka 做了二次封装,SpringCloud 封装了NetFlix公司开发的Eureka模块来实现服务注册和发现。

系统中的其他微服务。使用 Eureka 的客户端连接到 EurekaServer 并维持心跳连接(心跳连接就是每隔一段时间发个消息,如果没相应就说明已经没有了心跳,挂掉了)。这样系统的维护人员就可以通过 EurekaServer 来监控系统中各个微服务是否正常运行,SpringCloud 的一些其他模块(比如 Zuul)就可以通过 EurekaServer 来发现系统中的其他微服务,并执行相关的逻辑,逻辑关系和角色如下图所示:
在这里插入图片描述
而可以借此对比一下 Dubbo 框架的架构,对比学习,如下图:
在这里插入图片描述

2 Eureka 的两个组件

(以下学习自——百度百科 Eureka

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

  • Eureka Server提供服务注册服务各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。
  • Eureka Client是一个java客户端用于简化与Eureka Server的交互客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器
    在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。

综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性

3 Eureka 的三个角色

Eureka Server:提供服务的注册于发现。

Service Provider:将自身服务注册到Eureka中,从而使消费方能够找到。

Service Consumer:服务消费方从Eureka中获取注册服务列表,从而找到消费服务。

4 项目实战

4.1 【Eureka Server:springcloud-eureka-7001 子模块】搭建

在父 Maven 工程中(此 Maven 父工程,是直接利用的之前的一个项目:【Spring Cloud】RestTemplate:学习总结、项目实战)新建一个名为 springcloud-eureka-7001 的子模块作为服务端

为此子模块添加 Eureka 依赖,我们在上文已经提到了,Eureka包含两个组件,即 Eureka Server 和 Eureka Client,正好对应下图的两个红框项目:
在这里插入图片描述

我们让 springcloud-eureka-7001 子模块作为服务端,因此,导入 Spring Cloud Starter Eureka Server 依赖到其中,目前所需依赖如下

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
        <version>1.4.7.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

接下来创建 application.yml 配置文件,配置项目的端口及 Eureka 必要配置:
在这里插入图片描述

之后手写出此模块的主启动类,需要添加 @EnableEurekaServer 注解:
在这里插入图片描述

接下来,访问我们事先配置的地址,即可来到 Eureka 的监控页面
在这里插入图片描述

4.2 【服务提供者:springcloud-eureka-8001 子模块】改造

我们在之前的一个项目:【Spring Cloud】RestTemplate:学习总结、项目实战 中 springcloud-provider-dept-8001 的子模块的基础上改造,将此模块注册到 Eureka 注册中心中,来进一步学习 Eureka

选择并添加此依赖
在这里插入图片描述
在此模块的 pom 文件中添加依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
    <version>1.4.6.RELEASE</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

在其 yml 配置文件中添加内容:
在这里插入图片描述

在主启动类中添加 @EnableEurekaClient 注解
在这里插入图片描述

4.3 项目测试

4.3.1 Eureka 注册服务测试

测试时,先启动作为 Eureka 服务端的 springcloud-eureka-7001 子模块,再启动此 springcloud-eureka-8001 子模块
在这里插入图片描述
访问监控页面:http://localhost:7001/

8001 项目成功注册进来

在这里插入图片描述
其中,SPRINGCLOUD-PROVIDER-DEPT 对应
在这里插入图片描述

4.3.2 Eureka 的自我保护机制

我们这次将已注册进来的 8001 项目给终止掉,通过监控页面观察注册中心的变化
在这里插入图片描述

ok,注册中心中目前仍存在 8001 的服务
在这里插入图片描述
过了一会,提示如下红字,翻译过来就是:紧急情况!EUREKA可能错误地声称实例在未启动时已启动。续订小于阈值,因此实例不会为了安全而过期。
在这里插入图片描述
这就是 Eureka 的自我保护机制,保护过期实例,此微服务不可用了,Eureka 不会立刻清理,依旧会对该微服务的信息进行保存,在默认的情况下,如果Eureka Server 在一定的时候内,没有接受到某个微服务的心跳,就会注销该实例,默认时间是90秒。但是当网络发生故障的情况下,微服务和 EurekaServer 就无法通讯,这样就很危险,因为微服务本身是健康的,此时不应该注销该服务,而 EurekaServer 通过自我保护机制解决这个问题,自我保护机制可以手动禁用,但不推荐禁用。

关于 Eureka 的自我保护机制,有一篇大佬的文章:EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT 写的非常好。

最后,我们重新将 8001 项目启动起来,以进行下面的学习和测试。

4.3.3 配置监控信息

未配置前,点击此链接
在这里插入图片描述
点进去是报错的
在这里插入图片描述
接下来我们的配置就是解决此问题

在 8001 项目中添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

在 yml 中添加配置
在这里插入图片描述
之后我们再点下图的链接
在这里插入图片描述
可以成功访问我们预先配置的信息
在这里插入图片描述
因此,在大公司中,多个团队开发各自的微服务,为了表示各个模块服务中的团队信息,可以在此链接配置一些基本信息,并可以将 JSON 渲染到页面中。

4.3.4 获取微服务的信息

给 8001 模块的 DeptController 增加新的方法和实例
在这里插入图片描述
同时在 8001 模块的主启动类中开启此功能的自动配置,添加 @EnableDiscoveryClient 注解
在这里插入图片描述

注:导入的是接口
在这里插入图片描述
重启 8001 模块后,访问刚才配置的映射地址,即可得到项目的基本信息,可在团队合作开发中使用
在这里插入图片描述
同时,我们刚才写的输出内容如下
在这里插入图片描述

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

闽ICP备14008679号