springcloud学习笔记二:springcloud zuul

zuul 在微服务中主要有两个作用

1、路由转发

2、服务过滤

当然路由转发也是基于服务过滤实现的

以下是基于springboot来进行讲解的:

1、添加pom依赖


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

2、启动添加@EnableZuulProxy注解

@SpringBootApplication
@EnableZuulProxy
public class SpringCloudStuApplication {
   public static void main(String[] args) {
      SpringApplication.run(SpringCloudStuApplication.class, args);
   }
}

 3、配置文件yml中配置路由规则:

path-url模式:

zuul:
  routes:
    demo:                            //可以根据业务自定义名字
      path: /test/hello/**           //对请求地址进行拦截
      url: https://www.baidu.com     //转发的地址

path-serviceId模式(要用到consul,eureka服务注册中心,下一节会将consul注册中心)

zuul:
  routes:
    demo:
      path: /test/hello/**
      serviceId: hello-service           //具体微服务实例id

path匹配规则:

/api-a/? 可以匹配 /api-a/ 之后拼接一个任务字符的路径 , 比如 /api-a/a , /api-a/b , /api-a/c

/api-a/*  可以匹配 /api-a/ 之后拼接任意字符的路径, 比如 /api-a/a, /api-a/aaa, /api-a/bbb . 但它无法匹配 /api-a/a/b 这种多级目录路径

/api-a/** 可以匹配 /api-a/* 包含的内容之外, 还可以匹配形如 /api-a/a/b 的多级目录路径

4、添加zuulFilter(继承ZuulFilter)

public class RequestFilter extends ZuulFilter {
    /*这里有四个值供选择
     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";

          不出错的情况执行顺序为:pre-->route-->post

          出错的情况:pre-->route-->error-->post

    */
    @Override
    public String filterType() {
        return PRE_TYPE;
    }

    //在filterType相等的时候的,可以根据filterOrder来排序执行过滤器,越小的值越先执行
    @Override
    public int filterOrder() {
        return 0;
    }

    //执行过滤的业务逻辑
    @Override
    public boolean shouldFilter() {
        System.out.println("----------------------------RequestFilter------------------------------");
        return true;
    }

    //当shouldFilter返回为true才会执行run方法
    @Override
    public Object run() throws ZuulException {

        return null;
    }
}

在springBoot项目有两种方式使上述过滤器生效:

1、在类声明的时候添加@Component注解

2、声明一个bean如下:

@Configuration
public class FilterConfig {
    @Bean
    public RequestFilter requestFilter() {
        return new RequestFilter();
    }
}

 

你可能感兴趣的:(springcloud,java,zuul,springcloud,zuul,springcloud,java)