前言
本人是一枚正学习就java的程序员,想通过这里来记录每天学习的知识
SpringCloud
Ribbon的作用,解决的问题:
1.负载均衡:(微服务系统必须的功能)
当只有一台的服务器时,随着访问量的增大,服务器的压力也增大,这时很容易使服务器的崩溃,这时我们可以
使用负载均衡可以将访问压力分散到多个服务器,解决高并发,解决高可用问题
其中,我了解的负载均衡的策略有:
-
轮询 (默认):按时间顺序注意添加
权重 :按权重轮询分配
url-hash /ip-hash:第一访问后,第二次按url定位到访问过的服务器
fair:按后端服务器的相应时间来分配请求,响应时间短的优先
1.1ribbon依赖(在eureka client中已经包含)
1.2添加@LoadBlanced注解,用Ribbion封装RestTemple对象,对RestTemplate功能进行增强
@LoadBalanced//就可以使用负载均衡和重试
@Bean
public RestTemplate restTemplate(){
return new RestTempalte();
}
1.3在RibbonController中,请求的后台服务器路径,改成service-id,根据eureka地址表,可以获取这个服务器的集群主机地址列表
restTemplate。getForObject("http://service-id/{1}",JsonResult.class,userId)
service-id就是服务id,就是在eureka注册的服务名称,当同一个服务id有两台主机时(8001,8002)就可以通过ribbon的负载均衡来访问这两台主机
2.重试:容错(不是必须功能)
重试就是如果访问失败就会重试,如果访问成功就返回结果
1.添加Ribbon重试
1.1设置参数:
MaxAutoRetries-单台服务器的重试次数
MaxAutoRetriesNextServer-更换服务器的次数
OkToRetryOnAllOperation -是否对所有类型请求都重试,默认只对get重试,设成true就是对所有请求重试,如果是post可能重复提交数据
下面两个超时设置不能再yml中配置,需要再java代码中设置
connectTimeOut -建立连接超时时间
readTimeOut-已建立连接并发送请求,等待响应的超时时间
当第一次请求失败后,30秒后可以自动发起重试请求
Hystrix
是一个容错工具
Hystrix提供的容错功能:
1.降级
2.熔断
降级:
当调用后台服务失败,或超时,可以向客户端返回降级结果。即是提供一种快速失败的方式,
快速失败:
就是客户端不必长时间阻塞等待后台服务,超时后可以获德反馈。
防止雪崩,防止错误传播
熔断:
熔断就像家里的电箱,有一个总闸,如果访问量 过大,触发熔断,家里面的电路就会被断开。
当系统访问量过大,出现大量的失败情况时,会触发熔断,断路器打开,所有的请求直接执行降级代码返回降级结果。
触发熔断的条件:
1.10秒内20请求(必须首先满足,如10秒18次100%请求失败,但是不满足前提条件,不会触发熔断)
2.50%失败,执行了降级的代码
添加Hystrix降级
1.hystrix依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.添加主程序注解,启动hystrix断路器,触发断路器自动配置
//@EnableCircuitBreaker//启动hystrix断路器的主程序注解
//@EnableDiscoveryClient//新版本可以不加
//@SpringBootApplication
@SpringCloudApplication//可以代替以上三个注解
3.添加降级代码
3.1远程调用方法上,添加注解:
3.2实现降级方法:
即是当方法不执行时或执行报错,就降级执行fallbackMethod指定的方法
@HystrixCommand(fallbackMethod = "addOrderFB")
@GetMapping("/order-service/")
public JsonResult addOrder() {}
//--------fallbackMethod指定的方法------------//
public JsonResult addOrderFB() {
return JsonResult.err("添加订单失败");
}
4.hystrix超时时间默认是1秒,一般设置应该大于ribbon的最大时长
hystrix dashboard
hystrix 仪表盘,对hystrix出现错误的情况进行监控
actuator:是springboot提供的一个项目监控工具,可以监控项目的各种运行数据,hystrix利用actuater,可以添加hystrix的监控数据
添加actuator:
1.actuator依赖
2.暴露监控数据
3.只有ping没有出来一大坨的数据,这时候需要去访问监控业务的路径
搭建仪表盘项目
hystrix仪表盘是一个完全独立的项目,启动后,需要再他的额界面上指点监控数据的路径