在《Spring Cloud 微服务实战》第一章中介绍了Spring Cloud的常用模块:
Eureka是属于Spring Cloud Netflix的一部分。主要负责服务治理功能。
那什么是服务治理:
服务治理主要就是实现各个微服务之间的服务自动注册与发现。
Eureka同其他服务注册中心一样,支持高可用 配置。它依托于强一致性提供良好的服务实例可用性,通过集群部署,当集群中有分片出现故障时, 那么Eureka就转入自我保护模式。 它允许在分片故障期间继续提供服务的发现和注册, 当故障分片恢复运行时, 集群中 的其他分片会把它们的状态再次同步回来。Netflix推荐每个可 用的区域运行一个Eureka服务端,通过它来形成集群。不同可用区域的服务注册中心通过 异步模式互相复制各自的状态, 这意味着在任意给定的时间点每个实例关于所有服务的状 态是有细微差别的。
搭建注册中心
在书本的第41页
注册中心高可用
EurekaServer的高可用实际上就是将自己作为服务向其他服务注册中心注册自己, 这 样就可以形成一组互相注册的服务注册中心, 以实现服务清单的互相同步, 达到高可用的 效果。 下面我们就来尝试搭建高可用服务注册中心的集群。
服务的发现与消费
而服务消费的任务由伈bbon完成 。Ribbon是一 个基
千HTTP和TCP的客户端负载均衡器,它可以在通过客户端中配置的 ribbonServerList 服务端列表去轮询访问以达到均衡负载的作用。
服务下线
服务下限会通知注册中心,
注册中心自我保护机制:
保护网络不稳定的情况下,服务的心跳不能全部送达注册中心,注册中心会开启自我保护机制,以确保维护这些服务,但是会造成剔除有问题的服务不及时。所以可以关闭自我保护机制
eureka.server.enable-self-preservation=false
@EnableDiscoveryClient:一个客户端注册到注册中心拉取服务列表需要这个注解
下面这个两个是我所在的公司使用的注解(请忽略,我写在这里只是为了理清他们的关系):
@EnableEurekaClient
@EnableFeignClients
真正实现服务发现的是DiscoveryClient,这个类用于帮助与Eureka Server互相协作。
Eureka Client负责下面的任务:
-向Eureka Server注册服务实例
-向Eureka Server服务租约
- 当服务关闭期间, 向Eureka Server取消租约
-查询Eureka Server中的服务实例列表
服务续约
eureka.instance.lease-renewa l-interval-in-seconds= 30 eureka.instance.lease-expiration-duration-in-seconds= 90
对于所有eurake服务治理体系下的服务都需要配置eurake客户端,
Eureka客户端的配置主要分为以下两个方面。
• 服务注册相关的配置信息, 包括服务注册中心的地址、 服务获取的间隔时间、 可用区域等。
• 服务实例相关的配置信息, 包括服务实例的名称、IP地址、 端口号、 健康检查路径等。
eurake服务端源码可以从EurekaServerConfig-
Bean入手
关于服务注册类的配置信息可以从EurekaClientConfigBean入手。这个里面的配置信息都是以eureka.client为前缀的
指定注册中心
eureka.client.serviceUrl
eureka.client.serviceUrl.defaultZone=http://localhost:llll/eureka/
高可用eurake配置:
eureka.client.serviceUrl.defaultZone=http://peerl:1111/eureka/, http://peer2:111 2/eureka/
eureka的密码
为了服务注册中心的安全考虑, 很多时候我们都会为服务注册中心加入安全校 验。 这个时候, 在配置 serviceUrl 时, 需要在 value 值的 URL 中加入相应的安全校验 信息, 比如 http://:@localhost:1111/eureka。 其中, 为安全校验信息的用户名, 为该用户的密码。
下面整理了 org.springframework.cloud.netflix.eureka.Eureka.client.ConfigBean 中定义的常用配置参数以及对应的说明和默认值, 这些参数均以 eureka. client 为前缀。
服务实例类配置
它们以以eureka.instance为前缀
配置详情可以通过
org.springframework.cloud.
netflix.eureka.EurekaInstanceConfigBean中的源码了解。
元数据:Eureka 客户端在向服务注册 中心发送注册请求时, 用 来描述自身服务信息的
对象, 其中包含了 一 些标准化的元数据, 比如 服务名称、 实例名称、 实例IP、 实例端口等 用于服务治理的重要信息;以及一些用 千负载均衡策略或是其他特殊用途的自定义 元数据
信息。
所有的配置信息都通过org.springframework.
cloud.netflix.eureka.EurekaInstanceConfigBean进行加载,但在真正进行服 务注册的时候, 还是会包装成com.netflix.appinfo.Instancelnfo 对象发送给Eureka 服务端 。
自定义元数据:
配置方式:
eureka.instance.metadataMap. =
例如:eureka.instance.metadataMap.zone=shanghai
eureka.instance.instanceid=
s
p
r
i
n
g
.
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
:
{spring.application.name}:
spring.application.name:{random.int}}
路径修改:
因为使用的是rest风,所以支持跨平台。