SpringCloud(五)Zuul网关

浅浅的花香味﹌ 2022-01-31 10:25 413阅读 0赞

目录

一.Zuul网关综合使用

1.Zuul网关特点

2.Zuul路由

3.Zuul过滤器

4.Zuul限流

5.Zuul路由列表和过滤器列表


一.Zuul网关综合使用

1.Zuul网关特点

  • zuul主要由两部分组成:路由和过滤器
  • zuul的核心是一系列过滤器

2.Zuul路由

首先在pom.xml中导入zuul配置

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
  4. </dependency>

在启动类上加入注解@EnableZuulProxy,再将zuul项目注册到eureka中去。
zuul会默认配置一个以其他微服务的server_id为转发的路由。

  1. #系统默认配置
  2. zuul.routes.feign-customer=/feign-customer/**

所以这时候可以直接通过zuul来访问customer微服务
http://localhost\_zuul:port\_zuul/feign-customer/hi?name=123
会转发为http://locahost\_customer:port\_zuul/hi?name=123
当然,你也可以自定义转发路由

  1. #自定义转发规则
  2. zuul.routes.feign-customer=/service-customer/**
  3. #忽略某种规则的路由请求方式
  4. zuul.ignored-patterns=/feign-customer/**

3.Zuul过滤器

  • PRE:前置过滤器:限流,鉴权,参数校验,请求转发
  • POST:后置过滤器:统计,日志
  • ROUTE:路由过滤器
  • Error:错误过滤器

前置过滤器,忽略掉没有token的请求

  1. @Component
  2. public class CloudFilter extends ZuulFilter {
  3. @Override
  4. public String filterType() {
  5. return PRE_TYPE;
  6. }
  7. @Override
  8. public int filterOrder() {
  9. return PRE_DECORATION_FILTER_ORDER-1;
  10. }
  11. /**
  12. *校验判断
  13. * @return true 进入run方法,false不进入run方法
  14. */
  15. @Override
  16. public boolean shouldFilter() {
  17. return true;
  18. }
  19. @Override
  20. public Object run(){
  21. RequestContext requestContext = RequestContext.getCurrentContext();
  22. HttpServletRequest httpServletRequest = requestContext.getRequest();
  23. if(StringUtils.isEmpty(httpServletRequest.getParameter("token"))) {
  24. requestContext.setSendZuulResponse(false);
  25. requestContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
  26. }
  27. return null;
  28. }
  29. }

4.Zuul限流

对一些请求进行限流设置,应该在前置过滤器中最先进行。
令牌桶限流法:一定速率往桶中添加令牌,当令牌满来就会丢弃掉。当请求进来的时候,先获取令牌,获取到令牌的请求可以正常请求,无令牌的请求会被拒绝掉。
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI2MzI0NjY_size_16_color_FFFFFF_t_70

限流过滤器

  1. @Component
  2. public class RateLimitFilter extends ZuulFilter {
  3. //com.google.common.util.concurrent.RateLimiter谷歌的令牌算法
  4. private static final RateLimiter RATE_LIMITER = RateLimiter.create(100);//每秒100个令牌
  5. @Override
  6. public String filterType() {
  7. return PRE_TYPE;
  8. }
  9. @Override
  10. public int filterOrder() {
  11. return -1000;
  12. }
  13. @Override
  14. public boolean shouldFilter() {
  15. return true;
  16. }
  17. @Override
  18. public Object run() {
  19. if(!RATE_LIMITER.tryAcquire()){
  20. //没有获取令牌权限
  21. throw new RuntimeException();
  22. }
  23. return null;
  24. }
  25. }

5.Zuul路由列表和过滤器列表

如果想要查看zuul的过滤器列表和路由列表,首先需要开放请求配置

  1. #启动路由和过滤器查看
  2. management.endpoints.web.exposure.include=routes,filters

访问http://localhost:8059/actuator/filters接口查看过滤器
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI2MzI0NjY_size_16_color_FFFFFF_t_70 1
访问http://localhost:8059/actuator/routes查看路由列表
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI2MzI0NjY_size_16_color_FFFFFF_t_70 2

发表评论

表情:
评论列表 (有 0 条评论,413人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringCloud-zuul

    网关的作用:就相当于整个微服务体系的入口,所有的外部请求都应该通过zuul进行处理,zuul会通过请求url分析应该将请求分发给哪个微服务处理,微服务处理完毕之后,会将结果返回

    相关 springcloud zuul

    网关可以对请求进行过滤拦截,转发等,这种跟过滤器不一样,它可以拦截入口,而不是单独一个服务。 业务场景,会员服务和订单服务,用户必须登录才能调用相关接口(即含有userTok

    相关 SpringCloud之路由zuul

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统。一个