Ribbon 是微服务架构图中负责负载均衡的 组件。
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
测试如下:
//微服务方式 Ribbon方式
@GetMapping("ribbon/{name}")
public String RibbonTest(@PathVariable String name) {
// ip和域名 更换成 微服务名称
String url = "http://user-service/hello?name="+name;
String forObject = restTemplate.getForObject(url, String.class);
return forObject;
}
Hystrix 熔断:
1、熔断器:当某个服务的失败率达到一定阈值时,Hystrix会打开熔断器,停止对该服务的调用,从而防止故障进一步扩散。熔断器开启后,Hystrix会快速失败并返回备选结果或降级数据,以提高系统的响应速度。
2、资源隔离:Hystrix可以对调用远程服务的线程池进行资源隔离,限制调用分布式服务的资源使用。这样,即使某个服务出现故障,也不会影响其他服务的调用。
3、服务降级:当服务调用失败或资源不足时,Hystrix可以进行降级处理。降级后可以配合降级接口返回托底数据,以保证系统的正常运行。
4、缓存:Hystrix提供了请求缓存和请求合并的实现。通过缓存请求的结果,可以减少对后端服务的调用,提高系统的性能。同时,通过将多个相同类型的请求合并为一个批量请求,可以减少网络开销。
5、监控和告警:Hystrix可以监控服务的调用情况,如调用次数、成功率、响应时间等,并提供告警功能。这样,开发人员可以及时发现并处理潜在的问题。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在application中加入 @EnableCircuitBreaker注解
@EnableDiscoveryClient
@SpringBootApplication
@EnableCircuitBreaker //开启熔断 hytrix
public class ClientServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ClientServiceApplication.class, args);
}
使用方式如下:
方案一: 方法级别的指定
@GetMapping("ribbon/{name}")
@HystrixCommand(fallbackMethod = "ribbonTestFail")
public String RibbonTest(@PathVariable String name) {
// ip和域名 更换成 微服务名称
String url = "http://user-service/hello?name="+name;
String forObject = restTemplate.getForObject(url, String.class);
return forObject;
}
// 服务降级处理 配合使用 @HystrixCommand(fallbackMethod = "ribbonTestFail") 入参出入要一和对应方法一直
public String ribbonTestFail(String name){
return "请求失败";
}
方案二 类级别方案的指定:
@RestController
@RequestMapping("client")
@DefaultProperties(defaultFallback = "TestControllerRequestFail") //指定访问失败时的方法
public class TestController {
//微服务方式 Ribbon方式
@GetMapping("ribbon/{name}")
@HystrixCommand
public String RibbonTest(@PathVariable String name) {
// ip和域名 更换成 微服务名称
String url = "http://user-service/hello?name="+name;
String forObject = restTemplate.getForObject(url, String.class);
return forObject;
}
//统一处理,配合 @DefaultProperties(defaultFallback = "TestControllerRequestFail") 来使用
public String TestControllerRequestFail(){
return "Controller 请求失败";
}
yml 配置:
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 1000
circuitBreaker:
errorThresholdPercentage: 50 #触发熔断错误比例阈值,默认值50号
sleepWindowInMilliseconds: 10000 #熔断后休眠时长,默认值5秒
requestVolumeThreshold: 10 #熔断触发最小请求次数,默认值是20
Feign
是一个声明式的 HTTP 客户端,它使得编写 HTTP 客户端变得更简单,通过注解和接口的方式定义和调用远程服务。
pom 加入依赖:
<dependency>
<groupId>org.springframework.cl