
问题:系统会根据业务被拆分成了很多的微服务,微服务的信息如何管理?
Spring Cloud中提供服务注册中心来管理微服务信息。
为什么要用注册中心?
微服务数量众多,要进行远程调用就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务的ip和端口。
微服务会实时上报自己的状态,注册中心统一管理这些微服务的状态,将存在问题的服务踢出服务列表,客户端获取到可用的服务进行调用。
**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 的关系

Eureka Server 是服务端,负责管理各个微服务注册和发现。
在微服务上添加 Eureka Client 代码,就会访问到 Eureka Server 将此微服务注册在Eureka Server中,从而使服务消费方能够找到。
微服务(服务消费者)需要调用另一个微服务(服务提供者)时,从 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
商品提供者已经注册进 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。

*配置2台Eureka Server服务端的yml*文件 **
6001 服务端模块的 application.yml

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


将服务提供者 注册到2台** Eureka Server ****集群中 **
修改 microservice-cloud-03-provider-product-8001 中的 application.yml 文件,图示:

完整配置:


**效果测试 **
先启动 2个 Eureka Server 集群 (6001、6002)
访问:


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

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

版权归原作者 JAVA代码搬运工 所有, 如有侵权,请联系我们删除。