SpringCloud(一)微服务介绍
SpringCloud(二)【单体服务及远程调用】
一、Eureka是什么
Spring Cloud 将 Eureka 与 Netflix 中的其他开源服务组件(例如 Ribbon、Feign 以及 Hystrix 等)一起整合进 Spring Cloud Netflix 模块中,整合后的组件全称为 Spring Cloud Netflix Eureka。
Eureka 是 Spring Cloud Netflix 模块的子模块,它是 Spring Cloud 对 Netflix Eureka 的二次封装,主要负责 Spring Cloud 的服务注册与发现功能。
二、Eureka作用
-
消费者该如何获取服务提供者具体信息?
- 服务提供者启动时向eureka注册自己的信息
- eureka保存这些信息
- 消费者根据服务名称向eureka拉取提供者信息
-
如果有多个服务提供者,消费者该如何选择?
- 服务消费者利用负载均衡算法(Ribbon),从服务列表中挑选一个
-
消费者如何感知服务提供者健康状态?
- 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
- eureka会更新记录服务列表信息,心跳不正常会被剔除(90秒)
- 消费者就可以拉取到最新的信息
三、Eureka使用
(一)搭建EurekaServer
- 新建eureka-service服务
选择新建maven项目
新建名为eureka-service的服务
- 引入依赖
在eureka-service的pom文件中引入依赖spring-cloud-starter-netflix-eureka-server
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 添加@EnableEurekaServer注解
- 在application.yml中配置eureka地址
server:
port: 10086
spring:
application:
name: eurekaserver
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
- 启动服务查看
可以看到eureka的服务实例列表
搭建EurekaServer搭建成功。
(二)注册服务
- 引入eureka-client依赖
在order-service服务中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 在application.yml中配置eureka地址
配置该服务的名称和eureka的地址
重新启动,查看。
可以看到服务orderservice已经在eureka注册成功。
(三)服务发现
- 引入eureka-client依赖
在案例中,order-service相当于客户端向服务端user-service请求获取用户相信信息。
(二)中已经完成。 - 在application.yml中配置eureka地址
(二)中已经完成。 - 给RestTemplate添加@LoadBalanced注解
主要用于负载均衡,在有多个服务提供者的时候使用。
@LoadBalanced
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
- 用服务提供者的服务名称远程调用
三、More
(一)基础架构
- 服务提供者
- 服务注册
在启动时,通过REST请求的方式将自己注册到Eureka Service服务,同时带上自身的有些元数据。 - 服务同步
- 服务续约
eureka:
instance:
lease-renewal-interval-in-seconds: 30 # 服务续约间隔时间,默认30s
lease-expiration-duration-in-seconds: 90 # 服务失效时间,默认90s
- 服务消费者
- 获取服务
- 调用服务
- 服务下线
服务势力进行正常的关闭操作时,会出发一个服务下线REST请求给Eureka Service。服务端在接收到请求后,将服务状态设置为下线(DOWN),并把该事件传播出去。
- 服务注册中心
- 失效剔除
服务实例非正常下线(内存溢出,网络故障等),注册中心可能收不到下线请求。所以Eureka Service在启动时会创建一个定时任务,每隔一段时间(默认60s)将清单中超时(默认90s)没有续约的服务剔除。 - 自我保护
Eureka Service统计运行期间,如果最近一分钟实际接收到的心跳值Renews除以期望的心跳阈值 Renews threshold小于等于0.85,即 Renews/Renews threshold≤0.85。Eureka Service会将当前实例保护起来,让这些实例不过期,尽可能保护注册信息。
在本地开发调试很容易达成自我保护条件,可以使用eureka.server.enable-self-preservation=false
关闭自我保护,默认值是false。
关于自我保护,这里看了两篇文章。