四、Hystrix
相关概念,“雪崩效应”(个人理解):
在分布式的环境中,服务之间相互关联,当某一服务不可用时,会导致用户请求阻塞,越来越多的用户访问当前服务,进而导致服务器崩溃
Hystrix 作用(个人理解):
熔断与降级,熔断类似生活中的“电路保险丝”,当某一服务发生故障时,对整个服务进行熔断,防止服务器崩溃;
降级指的是发生熔断操作时,执行的兜底逻辑,不至于用户看到错误页面,产生不友好的浏览体验
springcloud整合Hystrix简单配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
---------------------------------------------------------------
# 断路器
feign:
hystrix:
enabled: true
-------------------------------------------------------------------
@SpringBootApplication
@EnableFeignClients
//开启断路器
@EnableCircuitBreaker
public class CoursePriceApplication {
public static void main(String[] args) {
SpringApplication.run(CoursePriceApplication.class,args);
}
}
/**
* course-list 的feign客户端
*/
//正常情况下访问course-list模块,当course-list模块发生故障时,访问CourseListClientHystrix类
@FeignClient(value = "course-list",fallback = CourseListClientHystrix.class)
public interface CourseListClient {
@GetMapping("/courses/{id}")
List<Course> courseList(@PathVariable Integer id);
}
package com.study.course.client;
import com.study.course.entity.Course;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class CourseListClientHystrix implements CourseListClient{
@Override
public List<Course> courseList(Integer id) {
List<Course> defaultCourses = new ArrayList<>();
Course course = new Course();
course.setId(1);
course.setCourseId(1);
course.setCourseName("默认课程");
course.setValid(1);
defaultCourses.add(course);
return defaultCourses;
}
}
五、zuul网关
作用:
Zuul 使用一系列不同类型的过滤器。这些过滤器帮助我们执行以下功能:
-
身份验证和安全性 - 确定每个资源的身份验证要求并拒绝不满足要求的请求。
-
洞察力和监控 - 在边缘跟踪有意义的数据和统计数据,以便为我们提供准确的生产视图。
-
动态路由 - 根据需要将请求动态路由到不同的后端集群。
-
压力测试 - 逐渐增加集群的流量以衡量性能。
-
减载 - 为每种类型的请求分配容量并丢弃超出限制的请求。
-
静态响应处理 - 直接在边缘构建一些响应,而不是将它们转发到内部集群
-
多区域弹性 - 跨 AWS 区域路由请求,以使我们的 ELB 使用多样化并使我们的优势更接近我们的成员
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
zuul:
prefix: /study #配置统一url前缀
routes:
course-list:
path: /list/** #localhost:9000/study/list/*****
serviceId: course-list
course-price:
path: /price/** #localhost:9000/study/price/*****
serviceId: course-price
//启用zuul网关
@EnableZuulProxy
@SpringCloudApplication
public class ZuulGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulGatewayApplication.class,args);
}
}
利用网关实现过滤器
pro过滤器 在路由请求之前运行
route过滤器 可以处理请求的实际路由
post过滤器 路由请求后运行
error过滤器 报错后运行
@Component
public class PreRequestFilter extends ZuulFilter {
@Override
public String filterType() {
//过滤器类型
return FilterConstants.PRE_TYPE;
}
@Override
public int filterOrder() {
//过滤器执行顺序
return 0;
}
@Override
public boolean shouldFilter() {
//是否启用过滤器
return true;
}
@Override
public Object run() throws ZuulException {
//过滤器核心内容
return null;
}
}