采用服务名称指定路由方式
1.1使用服务名称指定路由的规则是什么?
1)serviceId
##规则:zuul.routes.路径名.path
##规则:zuul.routes.路径名.serviceId=eureka 的服务名
2)#zuul.routes 后面跟着的是服务名,服务名后面跟着的是路径规则,这种
配置方式更简单。
zuul.routes.e-book-product-provider.path=/suibian/**
1.2需改配置文件,将路由规则修改为使用服务名称路由。
路由的排除方法
2.1什么是路由排除法?
排除不需要的服务
1)指定服务
#zuul.ignored-services=服务的名称
2)关闭所有的服务,单独放行需要的服务
#zuul.ignored-services=*
#zuul.routes.e-book-order-provider.path=/服务的名称
2.2修改配置文件,将路由规则修改为添加前缀法。
zuul.prefix=/suibian
zuul.routes.e-book-product-provider.path=/服务的名称/
自定义网关过滤器
3.1创建一个Maven的jar项目。
3.2 修改POM文件,添加Zuul启动器。
<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>
<dependency>
3.3需改配置文件,添加服务相关配置。
spring.application.name=zuul-6fallback
server.port=9020
#配置服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://admin:1234@192.168.41.242:5050/eureka/,http://admin:1234@192.168.41.242:5051/eureka/
过滤器类型讲解
4.1 ZuulFilter的作用是什么?
是继承该接口的类具有过滤器作用
4.2过滤器有哪些类型?有什么作用?
4.3在项目中创建一个登陆过滤器。
Zuul的请求生命周期
5.1阐述Zuul的请求生命周期。
5.2创建权限验证服务。
5.3修改POM文件,添加相关坐标。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
5.4修改POM问价,添加Zuul启动器坐标。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
5.5修改配置文件,添加服务相关配置。
spring.application.name=zuul-gateway-example
server.port=9020
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://user:123456@eur
eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
采用网关过滤器实现权限验证
6.1 AccessFilter添加登录权限验证业务。
网关过滤器执行顺序与post类型演示
7.1阐述多网关过滤器的执行顺序。
Pre ,routing,error,post
7.2创建AccessFilter2过滤器,PostFilter2过滤器,分析他们的执行顺序。
采用网关过滤器对系统异常同一处理
8.1阐述如何通过网关过滤器实现异常同意处理?
当zuul服务器出现异常时,错误过滤器会接收到异常,会做相应的处理
8.2 ErrorController接口的作用是什么?
自定义异常处理
8.3创建异常处理过滤器。
package com.bjsxt.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class ErrorFilter extends ZuulFilter {
private static Logger logger= LoggerFactory.getLogger(ErrorFilter.class);
//过滤器类型
@Override
public String filterType() {
return "error";
}
//执行顺序,值越小,优先级越高
@Override
public int filterOrder() {
return 0;
}
//是否开启
@Override
public boolean shouldFilter() {
return true;
}
//过滤内容
@Override
public Object run() throws ZuulException {
//获取上下文请求对象
logger.info("--------------------------error-------------------");
return null;
}
}
8.4创建处理异常响应的控制器,实现异常统一处理。
package com.bjsxt.filter;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyErrorController implements ErrorController {
@Override
public String getErrorPath() {
return "error";
}
@RequestMapping("/error")
public String errorMessage(){
return "{\"result \": \"has error\"}";
}
}
Zuul和hystrix无缝结合
9.1 Zuul与Hystrix结合时,是否需要添加Hystrix坐标?
不需要,因为zuul中包含了hystrix坐标
9.2获取网关数据流的URL是什么?
Localhost:port:/hystrix.stream
在网关中实现对服务降级处理
10.1 ZuulFallbackProvider接口的作用是什么?
处理服务降级响应的处理,包含响应头,响应体,状态码
10.2创建Maven的jar工程。
10.3需改POM文件,添加相关坐标。
10.4修改POM文件,添加Zuul坐标。
10.5修改配置文件,添加服务相关配置。
10.6创建ProviderProductFallback类,添加服务降级业务逻辑。
在高并发情况下,网关实现限流达到自我保护
11.1在高并发情况下,网关如何实现限流达到自我保护?
在规定时间内,限制用户访问次数
11.2网关限流配置参数zuul.ratelimit.enabled的作用是什么?
开启限流
11.3网关限流配置参数zuul.ratelimit.repositry的作用是什么?
支持的存储类型
11.4网关限流配置参数
11.5 zuul.ratelimit.policies.ServiceId.refresh-interval的作用是什么?
刷新窗口的时间
11.6网关限流配置参数zuul.ratelimit.policies.ServiceId.limit的作用是什么?
请求数量的限制
11.7网关限流配置参数zuul.ratelimit.policies.ServiceId.quota的作用是什么?
单位时间允许访问的的总时间
11.8网关限流配置参数zuul.ratelimit.policies.ServiceId.type的作用是什么?
访问的类型,比如ip,域名等等
11.9创建Maven的jar工程。
11.10需改POM文件添加相关坐标。
<dependency><groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
11.11修改POM文件,添加Zuul坐标。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
11.12修改POM文件,添加Ratelimit坐标。
<dependency>
<groupId>com.marcosbarbero.cloud</groupId>
<artifactId>spring-cloud-zuul-ratelimit</artifactId>
<version>1.3.4.RELEASE</version>
</dependency>
11.13修改配置文件,添加服务相关配置。
spring.application.name=zuul-gateway-ratelimit
server.port=9020
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka
1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
zuul.routes.e-book-product-provider.path=/product/**
11.14修改配置文件,添加全局限流策略。
<dependency><groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
11.15访问服务,测试限流结果。
11.16需改配置文件,添加局部限流策略。
11.17访问服务,测试限流结果。
Zuul性能调优-网关的2层超时调优
12.1什么是网关的2层超时调优?
12.1创建Maven的jar工程。
12.2修改POM文件,添加相关坐标。
<dependency>
<groupId>com.marcosbarbero.cloud</groupId>
<artifactId>spring-cloud-zuul-ratelimit</artifactId>
<version>1.3.4.RELEASE</version>
</dependency>
12.4修改POM文件,添加Zuul启动器坐标。
12.5修改配置文件,添加2层超时调优策略。
#全局配置限流
zuul.ratelimit.enabled=true
##60s 内请求超过 3 次,服务端就抛出异常,60s 后可以恢复正常请求
zuul.ratelimit.default-policy.limit=3
zuul.ratelimit.default-policy.refresh-interval=60
##针对 IP 进行限流,不影响其他 IP
zuul.ratelimit.default-policy.type=origin
来源:CSDN
作者:素拾
链接:https://blog.csdn.net/qq_43364293/article/details/103533454