SpringCloud - Eureka 提供服务注册与服务发现

 

目录

一、Eureka介绍

二、服务注册中心Server

三、服务提供者

四、服务消费者

五、搭建简单的单机版Eureka


一、Eureka介绍

在微服务中,随着系统水平扩展的越来越多,系统拆分为微服务的数量也会相应增加,那么管理和获取这些微服务的URL就会变得十分棘手,如果手动管理微服务,每次新增/ 修改一个微服务,就要在其它用到此微服务的地方手动加上/修改 它的URL地址或者其他通信协议的地址,这样工作量巨大而且会经常出错,一旦某个微服务的地址发生了变化,就要手动修改所有引用它的微服务的配置文件。所以spring-cloud eureka server就是为了解决这样的问题而出现,经过简单的配置,即可自动注册和发现微服务

可以分为Eureka服务端Eureka客户端Eureka服务端即服务注册中心。Eureka客户端包含两个角色:服务提供者和服务消费者。Eureka的主要功能是服务治理。所有的微服务在使用过程中会向Eureka进行注册,而后客户端利用Eureka获取服务的信息(即服务的发现)。

 

二、服务注册中心Server

管理各种服务功能包括服务的注册、发现、熔断、负载、降级等,比如dubbo admin后台的各种功能。

扫描二维码关注公众号,回复: 9284800 查看本文章

功能

  • 服务提供者信息同步
  • 失效剔除
  • 自我保护

- 服务信息同步:

当服务提供者将自己的信息注册给某个注册中心,该注册中心就会将此服务信息同步到集群中的其他注册中心上,从而实现注册中心间的服务同步。

- 失效剔除:

服务提供者正常下线时,会发送下线通知给注册中心,注册中心能正常处理这种情况。如果服务非正常下线的话,注册中心又该如何处理呢?Eureka Server在启动的时候会创建一个定时任务每分钟扫描一篇服务清单,如果发现有服务超过90秒没有发送过心跳就将该服务信息剔除出去。

- 自我保护:

然而失效剔除的时候,有可能会因网络故障接收不到某些微服务实例心跳,从而将正常微服务注销 ,这时候需要自我保护机制。

默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。该情况下Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

 

三、服务提供者

功能

  • 注册服务
  • 续约
  • 服务下线通知

- 注册服务

这里是client的注册

- 续约

服务注册完之后,服务提供者和Eureka注册中心之间会维持心跳来告知注册中心,服务还活着。我们把该操作称为服务续约(Renew),下列两个配置和续约有关:

eureka:
  instance:
    lease-renewal-interval-in-seconds: 30     #每30秒会向Eureka Server发起Renew操作
    lease-expiration-duration-in-seconds: 90  #服务失效时间。默认是90秒,也就是如果Eureka Server在90秒内没有接收到来自Service Provider的Renew操作,就会把Service Provider剔除。

- 服务下线

当服务提供者进行正常的关闭操作时,会触发一个服务下线的REST请求给Eureka注册中心。Eureka服务端在收到请求之后,将该服务状态设置为下线(DOWN),并把该线下通知广播出去。

 

四、服务消费者

功能

  • 获取服务列表
  • 调用服务

- 服务发现,获取服务列表

在Eureka的客户端程序中注入DiscoveryClient类,借助该类可以帮助我们自动获取服务的列表信息

@Autowired
private DiscoveryClient client ; // 进行Eureka的发现服务
@RequestMapping("/discover")
public Object discover() { // 直接返回发现服务信息
    return this.client ;
}

- 调用服务

服务消费者通过服务标识符获取具体的服务提供者信息,由服务消费者自己决定具体调用哪个服务提供者。所以服务消费者通常要维护负载均衡算法,在SpringCloud中提供了Ribbon组件进行客户端的负载调度。

五、搭建简单的单机版Eureka

Eureka官方没有提供单独的安装包来运行。我们需将Eureka的依赖引入单独的工程中,然后部署运行该工程即可将Eureka的服务启动起来。spring cloud已经帮我实现了服务注册中心,我们只需要很简单的几个步骤就可以完成。

(1)引入相关依赖

<artifactId>spring-cloud-starter-eureka-server</artifactId>

(2)配置文件application.yml中加入Eureka相关的配置

eureka:
  instance: # eureak实例定义
    hostname: 127.0.0.1 # 定义Eureka实例所在的主机名称

(3)在启动类中加入@EnableEurekaServer注解

@SpringBootApplication
@EnableEurekaServer   // 启动Eureka服务
public class Eureka_7001_StartSpringCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(Eureka_7001_StartSpringCloudApplication.class,args);
    }

(4)启动应用,打开浏览器访问http://127.0.0.1:7001/,成功则出现spring Eureka界面

 

 

 

 

 

 

发布了48 篇原创文章 · 获赞 35 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/kqZhu/article/details/96902315