(谷粒项目九)spring cloudEureka应用

一、Eureka

基本概念

Eureka是Netflix开发的服务发现框架,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服务器

官方文档:http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#spring-cloud-eureka-server

1、父工程中定义Spring Cloud的版本

(已添加)

<dependencyManagement>
    <dependencies>
        
        <!--Spring Cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2、创建Eureka服务器模块

创建Maven模块:guli-commonservice-eureka

3、配置pom

<dependencies>
    <!--注册中心-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

4、配置application.properties

#服务端口
server.port=8220

# 服务名
spring.application.name=guli-eureka

# 环境设置:dev、test、prod
spring.profiles.active=dev

#Eureka客户端与Eureka服务端进行通信的地址
eureka.client.service-url.defaultZone=http://localhost:${server.port}/eureka

5、创建启动类

在启动类上添加注解@EnableEurekaServer

package com.guli.eureka;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class);
    }
}

6、logback.xml

7、启动Eureka注册中心并在浏览器中访问

http://localhost:8220

System Status:系统信息

DS Replicas:服务器副本
Instances currently registered with Eureka:已注册的微服务列表

General Info:一般信息

Instance Info:实例信息

将注册中心的本身从服务注册列表中移除

#是否将自己注册到Eureka服务器中,本身是服务器,无需注册
eureka.client.register-with-eureka=fals

三、服务注册

在edu微服务中完成以下配置

1、客户端配置pom

配置Eureka客户端的pom依赖

<!--服务注册-->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2、添加服务配置信息

配置application.properties,在客户端微服务中添加注册Eureka服务的配置信息

#指定注册中心地址
eureka.client.service-url.defaultZone=http://localhost:8220/eureka/
#eureka服务器上获取的是服务器的ip地址,否则是主机名
eureka.instance.prefer-ip-address=true

3、添加Eureka客户端注解

在客户端微服务启动类中添加注解

@EnableEurekaClient

@EnableDiscoveryClient和@EnableEurekaClient:都是能够让注册中心能够发现,扫描到该服务。

@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。

从Spring Cloud Edgware开始,@EnableDiscoveryClient 或@EnableEurekaClient 可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。

4、启动客户端微服务

启动注册中心

启动已注册的微服务,可以在Eureka注册列表中看到被注册的微服务

项目中应用

源码guli-commonservice-eureka是eureka server服务注册中心

guli-microservice-edu是eureka client服务客户端

  • 先启动guli-commonservice-eureka,因为edu项目中是配置的多个eureka server服务,所以都启动了。设定不同的端口即可
  • 在启动guli-microservice-edu
  • 打开http://localhost:8220 就可以查看注册中心的信息。

四、Eureka的自我保护模式

1、测试自我保护

首先启动Eureka服务器和edu微服务,访问注册中心 http://localhost:8220/,可以看到,实例是成功注册到中心的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RzxR7ONF-1633773246881)(file:///E:/weizhiBiJi/temp/49654a7d-3e28-403d-a1a5-4a94e359ca6e/128/index_files/4eecb7f1-72fa-488b-9db6-9fed07805afa.png)]

此时我们将edu服务关闭,刷新注册中心,我们会发现如下界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nuuSZcsA-1633773246886)(file:///E:/weizhiBiJi/temp/49654a7d-3e28-403d-a1a5-4a94e359ca6e/128/index_files/8b6443ba-8a60-4b32-9143-ed75e58f4eee.png)]

我们除了看到了一行红色的警告信息,还发现了一件神奇的事情,就是我们的服务实例虽然被kill了,但是在服务注册中心它还是存在的。这就是Eureka自我保护机制,它不会剔除已经挂掉的服务,它会认为这个服务是在尝试重新连接的。

Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果低于,就会将当前实例注册信息保护起来,让实例不会过期,尽可能保护这些注册信息。

2、关闭自我保护

如果在保护期间,实例出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败。这个时候客户端的容错机制就很重要了。(重新请求,断路器)

保护机制,可能会导致服务实例不能够被正确剔除。我们在开发过程中不希望Eureka的自我保护机制开启,不利于开发。我们可以关闭Eureka的自我保护机制(实际生产环境不建议关闭)。

在本地开发时,可使用:eureka.server.enable-self-preservation=false关闭保护机制,使不可用实例能够正常下线。

guli-commonservice-eureka 添加如下配置

#关闭保护机制,以确保注册中心将不可用的实例正确剔除
eureka.server.enable-self-preservation=false
#(代表是5秒,单位是毫秒,清理失效服务的间隔 )
eureka.server.eviction-interval-timer-in-ms=5000

guli-microservice-edu 的配置

# 心跳检测检测与续约时间
# 测试时将值设置设置小些,保证服务关闭后注册中心能及时踢出服务
# 配置说明
#  lease-renewal-interval-in-seconds 每间隔5s,向服务端发送一次心跳,证明自己依然”存活“
#  lease-expiration-duration-in-seconds  告诉服务端,如果我10s之内没有给你发心跳,就代表我“死”了,将我踢出掉。
eureka.instance.lease-renewal-interval-in-seconds=5
eureka.instance.lease-expiration-duration-in-seconds=10

我们重新启动Eureka服务,此时我们发现,红色警告变成了自我保护被关闭的警告,

然后关闭edu客户端进行测试,发现隔20秒左右,edu实例被注册中心剔除,表明此时自我保护机制被关闭。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yVLKvwUk-1633773246891)(file:///E:/weizhiBiJi/temp/49654a7d-3e28-403d-a1a5-4a94e359ca6e/128/index_files/e5d1e64e-3f2a-4a07-bbd4-e994ca62a7e2.png)]

五、Eureka的高可用

1、Eureka服务集群

Eureka服务器两两互相注册,其它微服务注册到集群中所有的服务器上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgIJI3Y5-1633773246899)(file:///E:/weizhiBiJi/temp/49654a7d-3e28-403d-a1a5-4a94e359ca6e/128/index_files/21b413ffcea73eb9dd6309db26873d8c.png)]

2、模拟Eureka集群部署

(1)编辑启动配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fCYNtcf5-1633773246904)(file:///E:/weizhiBiJi/temp/49654a7d-3e28-403d-a1a5-4a94e359ca6e/128/index_files/62de06ac-e0ca-4de4-9b96-3d62d986af7d.png)]

(2)分配端口

三个服务分别8200、8201、8202端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HjeIgPpi-1633773246906)(file:///E:/weizhiBiJi/temp/49654a7d-3e28-403d-a1a5-4a94e359ca6e/128/index_files/9ec5c32e-f40a-47bd-98e9-fe4f9f11b346.png)]

3、配置并启动

(1)配置eureka集群并启动

注意:测试时修改配置和启动的速度尽量快一些!保证服务尽可能的同时启动

服务器0:配置并启动

#服务端口
#server.port=8220
......
#Eureka客户端与Eureka服务端进行通信的地址
eureka.client.service-url.defaultZone=http://127.0.0.1:8221/eureka/,http://127.0.0.1:8222/eureka/

服务器1、服务器2同服务器0,注册到另外两台Eureka服务上,然后启动

(2)配置edu并启动

测试edu只注册到8220端口,启动后发现集群中其他端口的eureka服务也获取到了edu的注册信息

# 注册中心
eureka.client.service-url.defaultZone=http://localhost:8220/eureka

为了确保edu任何时候都能注册到集群中的可用注册中心服务器上,可以在edu中做如下配置

# 注册中心
eureka.client.service-url.defaultZone=http://localhost:8220/eureka,http://localhost:8221/eureka,http://localhost:8222/eureka

生产上建议至少两台或以上的Eureka服务器集群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

knight郭志斌

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

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

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

打赏作者

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

抵扣说明:

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

余额充值