SpringCloud笔记
SpringCloud简介
今日学习知识点
1. Eureka
1.1 Eureka服务端
- Eureka是服务注册中心。
- Eureka启动时,会把自己的地址向服务器注册
- 微服务每隔30s从Eureka拉取一次数据
- Eureka每30秒发送一次心跳检测,连续三次收不到心跳回应,Eureka就会认为微服务挂掉了
- 一个服务不可用时,Eureka会进入保护模式,而不是删掉它。(Zookeeper则是立即删除,实现了强一致性,而Eureka则是高可用。这是两者的区别之一)
- Eureka ==>
高可用
|对等结构
- Zookeeper ==>
一致性
|主从结构
- 主启动类需要添加
@EnableEurekaServer
注解,来标识启动Eureka注册中心
- yml文件配置如下(实现高可用,需配置两个或多个环境的Eureka)
spring:
application:
name: eureka-server # 为微服务起个名字
eureka:
server:
enable-self-preservation: false # 关闭保护模式,测试环境下,eureka很容易进入保护模式
# instance:
# hostname: eureka1
# client:
# register-with-eureka: false # false表示不注册
# fetch-registry: false # false表示不拉取
#server:
# port: 2001
---
spring:
profiles: eureka1
server:
port: 2001
# eureka1 向 eureka2 注册
eureka:
instance:
hostname: eureka1
client:
service-url:
defaultZone: http://eureka2:2002/eureka
---
spring:
profiles: eureka2
server:
port: 2002
# eureka2 向 eureka1 注册
eureka:
instance:
hostname: eureka2
client:
service-url:
defaultZone: http://eureka1:2001/eureka
1.2 Eureka客户端
- 既然都需要向Eureka去注册自己的
服务地址:端口
信息,那么主启动类需要加上@EnableDiscoveryClient
注解。并且yml文件需配置注册中心的地址(有几个注册中心,就写就几个地址)
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
2. Ribbon负载均衡+重试
EurekaClient中已经包含Ribbon依赖
2.1 RestTemplate
RestTemplate是Springboot提供的工具,可以实现跨域访问。类似HttpClient
、Jsonp
是一个http工具,实现远程调用
- 方法
- getForObject(url, 转换类型, 提交的参数)
- postForObject(url, 提交的数据, 转换的类型)
- 主启动类配置一个
RestTemplate
交给Spring管理
//创建 RestTemplate 实例,并存入 spring 容器
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
2.2 负载均衡
RestTemplate 设置 @LoadBalanced
// 创建 RestTemplate 实例,并存入 spring 容器
@Bean
@LoadBalanced // 负载均衡
public RestTemplate getRestTemplate() {
SimpleClientHttpRequestFactory f = new SimpleClientHttpRequestFactory();
f.setConnectTimeout(1000); // 设置超时时间
f.setReadTimeout(1000); // 接收请求时间
return new RestTemplate(f);
}
- 访问路径设置为服务id,而不是写死的端口号
2.3 重试
- 需要添加依赖
spring-retry 依赖
- yml配置ribbon重试
ribbon:
MaxAutoRetried: 1 # 失败后最大重试次数
MaxAutoRetriedNextServer: 2 # 失败后,最多连接下一个服务器的个数
OkToRetryOnAllOperations: true # 是否对所有操作都重试,默认false,只对get请求重试,对post请求不重试
3. Hystrix降级+断路器
hystrix可以实现降级,方访问失败满足一定要求是,就会对访问降级,
启动断路器,断路器提供两个核心功能:
降级
,超时、出错、不可到达时,对服务降级,返回错误信息或者是缓存数据熔断
,当服务压力过大,错误比例过多时,熔断所有请求,所有请求直接降级- 可以使用 @SpringCloudApplication 注解代替三个注解
//@SpringBootApplication
//@EnableDiscoveryClient
//@EnableCircuitBreaker
3.1 Hystrix+Ribbon+Dashboard
可以使用Dashboard来监控后台服务请求。相当于一个仪表盘
4. Feign
在微服务中,Ribbon和Hystrix总是同时出现。所以Feign
整合了Ribbon+Hystrix
Feign
默认*开启了Ribbon负载均衡和重试*
Feign
没有开启断路器,Feign虽然集成了Hystrix,但是没有完全引入Hystrix的依赖,需要自己手动在yml文件中配置。- 它使用了
Rest
风格的接口,只需要写接口类,加上@FeignClient(name = "服务id", fallback=降级实现类.class)
就可以实现远程访问。
5. Turbine
使用Dashboard
只能监控一个微服务。当想要同时监控多个微服务的时候,可以用Turbine
监控多个服务,再将Turbine的监控断点暴露给Dashboard。