0


Eureka 服务的注册与发现

问题:系统会根据业务被拆分成了很多的微服务,微服务的信息如何管理?

Spring Cloud中提供服务注册中心来管理微服务信息。

为什么要用注册中心?

  1. 微服务数量众多,要进行远程调用就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务的ip和端口。

  2. 微服务会实时上报自己的状态,注册中心统一管理这些微服务的状态,将存在问题的服务踢出服务列表,客户端获取到可用的服务进行调用。

**Eureka **介绍

Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装,它实现了服务治理的功能,Spring Cloud Eureka 提供 Eureka Server 服务端与 Eureka Client 客户端 ,服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。

客户端同时也具备一个内置的使用轮询(round-robin)负载算法的负载均衡器。在微服务启动后,将会向 Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

下图显示了 Eureka Server 与 Eureka Client 的关系

  1. Eureka Server 是服务端,负责管理各个微服务注册和发现。

  2. 在微服务上添加 Eureka Client 代码,就会访问到 Eureka Server 将此微服务注册在Eureka Server中,从而使服务消费方能够找到。

  3. 微服务(服务消费者)需要调用另一个微服务(服务提供者)时,从 Eureka Server 中获取服务调用地址,进行远程调用。

搭建单机版** Eureka Server **服务注册中心

创建** microservice-cloud-05-eureka-6001 **工程

配置** pom.xml **文件

配置** application.yml **文件

  在 src/main/resources下新建application.yml文件,配置如下:

创建主启动类

在启动类上添加 @EnableEurekaServer 注解,表示它是一个Eureka Server服务注册中心

功能测试

启动:microservice-cloud-05-eureka-6001

访问:http://localhost:6001/ ,效果如下:

服务注册到** Eureka Server **服务注册中心

说明:

将服务提供者( microservice-cloud-03-provider-product-8001)注册到 Eureka Server注册中心(microservice_cloud-05-eureka-6001)

下面对** microservice-cloud-03-provider-product-8001 **模块做对应的修改

配置** pom.xml **文件

完整配置

配置** application.yml **文件

完整配置

修改主启动类

在启动类上添加 @EnableEurekaClient 注解,表示它是一个Eureka的客户端,本服务启动后会自动注册进 Eureka Sever服务列表中

**功能测试 **

先要启动 Eureka Server:microservice-cloud-05-eureka-6001

再启动 Eureka Client:microservice-cloud-03-provider-product-8001

访问:http://localhost:6001/

商品提供者已经注册进 Eureka Server 中

微服务注册信息完善

*指定实例***ID **

问题:当前 状态中 含有主机名称

解决:修改** microservice-cloud-03-provider-product-8001 application.yml ****文件 **

*访问路径显示IP*地址 **

问题:鼠标放在 实例 ID 上,显示的还是主机名,而不是显示IP地址

解决:修改** microservice-cloud-03-provider-product-8001 application.yml ****文件 **

Eureka Server****自我保护机制

** 自我保护现象**

如长时间没有访问、检测不到心跳,或者修改实例名称,eureka启动自我保护机制

下图红色提示信息:表示已启动了自我保护机制

在某时刻某一个微服务不可用了,Eureka不会立刻删除,依旧会对该微服务的信息进行保存

**什么是自我保护机制 **

当Eureka Server 在一定时间内(默认90秒)没有接收到某个微服务的心跳,Eureka Server会从服务列表将此服务实例注销。但是如果出现网络异常情况(微服务本身是正常的),微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是正常的,此时本不应该注销这个微服务。

Eureka Server有一种 “自我保护模式” 来解决这个问题——当Eureka Server在短时间内丢失过多客户端时(可能发生了网络故障),此时Eureka Server会进入自保护模式,一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server会 自动退出自我保护模式。

所以, 自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。

自我保护配置

** 在开发阶段建议禁用自我保护模式,默认开启了 **

      在 eureka server 中配置: (microservice-cloud-05-eureka-6001)

搭建集群版** Eureka Server ****服务注册中心 **

为了避免 Eureka Server的失效,Eureka Server 高可用环境需要部署两个及以上Eureka Server,它们互相向对方

注册。如果在本机启动两个Eureka需要 注意两个Eureka Server的端口要设置不一样,如下图:

1、在实际使用时Eureka Server至少部署两台服务器,实现高可用。

2、两台Eureka Server互相注册。

3、微服务需要连接两台Eureka Server注册,当其中一台Eureka死掉也不会影响服务的注册与发现。

4、微服务会定时向Eureka Server发送心跳,报告自己的状态。

5、微服务从注册中心获取服务地址以RESTful方式发起远程调用

创建两个Eureka Server模块

创建 microservice-cloud-05-eureka-6002 ,与 microservice-cloud-05-eureka-6001 创建方式类似

配置** pom.xml **

    将 6001 中的 pom.xml 依赖复制到 6002 模块中

**主启动类 **

    将 6001 中的主启动类 复制到 6002 模块中,并将类名重命名。

IP****与域名绑定

** **找到 C:\Windows\System32\drivers\etc 目录下的hosts文件

IP与域名绑定进hosts文件

Eureka Server组成高可用,两个Eureka Server互相向对方注册,这里需要通过域名访问,这里我们设置两个

Eureka Server的域名分别为 eureka6001.com、eureka6002.com。

*配置2Eureka Server服务端的yml*文件 **

    6001 服务端模块的 application.yml 

    6002 服务端模块 的 application.yml , 注意修改端口号 6002          

将服务提供者 注册到2台** Eureka Server ****集群中 **

    修改 microservice-cloud-03-provider-product-8001 中的 application.yml 文件,图示:

完整配置:

**效果测试 **

  1. 先启动 2个 Eureka Server 集群 (6001、6002)

  2. 访问:

http://eureka6001.com:6001/

http://eureka6002.com:6002/

再启动 服务提供者 microservice-cloud-03-provider-product-8001


当前架构效果:服务提供者8001已注册进Eureka集群中

标签: eureka java

本文转载自: https://blog.csdn.net/qq_41273137/article/details/142092437
版权归原作者 JAVA代码搬运工 所有, 如有侵权,请联系我们删除。

“Eureka 服务的注册与发现”的评论:

还没有评论