首页 > 技术文章 > spring cloud学习笔记五 网关服务zuul

daijiting 2019-07-15 15:57 原文

      网关服务是指,客户端发送的请求不用直接访问特定的微服务接口,而且是经过网关服务的接口进行交互,网关服务再去到特定的微服务中进行调用。

   网关服务的路由功能Nginx的反向代理一样,所有的服务都先会来访问特定的服务器,然后通过这个服务器再去转发到指定的服务,这样对外界来说访问的是一个映射地址,真实的接口地址是不会暴露外界。

   路由功能能够很好的帮助我们现在集群的流量,比如弃用超出限定值的请求和对请求量大的集群扩容。

   除了路由功能,网关服务还为我们提供了过滤器功能,通过过滤器我们就可以鉴权验证。

一、spring cloud zuul路由配置

  1.导入maven

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>

  2.在启动类上加上注解:@EnableZuulProxy  ,表示这是一个网关服务

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;


@SpringBootApplication
//这是一个网关服务
@EnableZuulProxy
public class ZuulDemoApplication {

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

  3.配置application.properties文件,zuul中路由功能主要是通过配置application文件来操作,所以这个demo选用了properties文件格式,这是因为properties文件格式理解起来更容易一些。 

spring.application.name=zuulDemo
server.port=8000

#这里的配置表示,访问/user直接重定向到eureka中的zuulFictitious这个serviceId,其中user是自定义的字段,但是这个字段必须唯一
zuul.routes.user.path=/user/**
zuul.routes.user.serviceId=zuulFictitious

二、spring cloud zuul过滤器

  1.spring cloud zuul过滤器是创建一个实现类继承ZuulFilter这个类,这个类中有4个方法需要我们去实现: 

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;

import javax.servlet.http.HttpServletRequest;


public class ZuulDemoFilter extends ZuulFilter {
   
   //设置过滤器的类型,一共有4种
    //pre:可以在请求被路由之前调用
  //route:在路由请求时候被调用
  //post:在route和error过滤器之后被调用
  //error:处理请求时发生错误时被调用
    @Override
    public String filterType() {
        return "pre";
    }

    //设置滤器执行的顺序,依靠数值从小到大开始执行,0是最先执行的
    @Override
    public int filterOrder() {
        return 0;
    }

    //是否执行过滤器,true表示可以执行,这个可以通过代码逻辑来关闭过滤器
    @Override
    public boolean shouldFilter() {
        return true;
    }

    //过滤器的具体执行逻辑,如权限验证
    @Override
    public Object run() {
    return null;
    }
}

  2.配置完成后,还需要将过滤器在主启动类中注入

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;


@SpringBootApplication
//这是一个网关服务
@EnableZuulProxy
public class ZuulDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulDemoApplication.class, args);
    }
    @Bean
    public ZuulDemoFilter zuulDemoFilter (){
        return new ZuulDemoFilter ();
    }
}

 

 

 

 

推荐阅读