路由方式和过滤器

只谈情不闲聊 提交于 2019-12-14 00:55:01

采用服务名称指定路由方式

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!