使用SpringCloudZuul怎么实现动态路由

本篇文章为大家展示了使用SpringCloud Zuul怎么实现动态路由,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

为广州等地区用户提供了全套网页设计制作服务,及广州网站建设行业解决方案。主营业务为网站设计、成都网站设计、广州网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

maven引入Zuul

 
    
      org.springframework.cloud
      spring-cloud-starter-netflix-zuul
    

配置文件

server.port=10010
spring.application.name=zuul-server
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
#健康检查(需要spring-boot-starter-actuator依赖)
eureka.client.healthcheck.enabled=true
# 续约更新时间间隔(默认30秒)
eureka.instance.lease-renewal-interval-in-seconds=10
# 续约到期时间(默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=10

#zuul代理配置 zuul.routes.服务名.path,服务名要与注册的一致
#应用名映射
zuul.routes.myspringboot.path=/myspringboot/**
zuul.routes.myspringboot.service-id=myspringboot

#URL映射
#zuul.routes.myspringboot.path=/myspringboot/**
#zuul.routes.myspringboot-url.url=http://localhost:10087/

自定义Zuul过滤器

更多的检查规则后续慢慢健全

/**
 * Zuul过滤器,实现了路由检查
 */
public class AccessFilter extends ZuulFilter {

  /**
   * 通过int值来定义过滤器的执行顺序
   */
  @Override
  public int filterOrder() {
    // PreDecoration之前运行
    return PRE_DECORATION_FILTER_ORDER - 1;
  }

  /**
   * 过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型:
   *   public static final String ERROR_TYPE = "error";
   *   public static final String POST_TYPE = "post";
   *   public static final String PRE_TYPE = "pre";
   *   public static final String ROUTE_TYPE = "route";
   */
  @Override
  public String filterType() {
    return PRE_TYPE;
  }

  /**
   * 过滤器的具体逻辑
   */
  @Override
  public Object run() {
    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();
    System.out.println(String.format("%s AccessFilter request to %s", request.getMethod(),request.getRequestURL().toString()));
    String accessToken = request.getParameter("accessToken");
    //有权限令牌
    if (!StringUtils.isEmpty(accessToken)) {
      ctx.setSendZuulResponse(true);
      ctx.setResponseStatusCode(200);
      //可以设置一些值
      ctx.set("isSuccess", true);
      return null;
    } else {
      ctx.setSendZuulResponse(false);
      ctx.setResponseStatusCode(401);
      ctx.setResponseBody("{\"result\":\"accessToken is not correct!\"}");
      //可以设置一些值
      ctx.set("isSuccess", false);
      return null;
    }
  }

  /**
   * 返回一个boolean类型来判断该过滤器是否要执行
   */
  @Override
  public boolean shouldFilter() {
    return true;
  }
}

启动类

添加@EnableZuulProxy注解并使用自定义过滤器

@EnableZuulProxy
@SpringBootApplication
public class ZuulServerApplication {

  public static void main(String[] args) {
    SpringApplication.run(ZuulServerApplication.class, args);
  }

  @Bean
  public AccessFilter accessFilter() {
    return new AccessFilter();
  }
}

效果演示

启动所有项目,我们在Eureka上注册了四个服务,相比上篇(SpringCloud系列——Ribbon 负载均衡)多了一个Zuul

使用SpringCloud Zuul怎么实现动态路由

浏览器访问 http://localhost:10010/myspringboot/feign/ribbon、http://localhost:10010/myspringboot/feign/ribbon?accessToken=123456

http://localhost:10010/ 这个端口对外暴露,相对于总入口,后面接不同的路径由,Zuul路由到对应的服务上

1、没有accessToken是,无法通过检查

2、携带accessToken时,可正常路由,并且Feign调用、Ribbon负载均衡

使用SpringCloud Zuul怎么实现动态路由

上述内容就是使用SpringCloud Zuul怎么实现动态路由,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


名称栏目:使用SpringCloudZuul怎么实现动态路由
网页链接:http://azwzsj.com/article/jdgsds.html