欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringCloud微服务实战之网关服务zuul

程序员文章站 2022-06-21 17:04:32
...

Spring Cloud Zuul同样是基于NetFlix Zuul实现的API网关组件。主要用于解决1.对于路由规则和服务实例的维护问题。2.对于类似签名校验、登录校验在微服务架构中的冗余问题。

一、构建网关
1、新建Maven项目SpringCloud-zuul
SpringCloud微服务实战之网关服务zuul

2、在pom中添加zuul依赖

    <!-- add zuul depend -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>

spring-cloud-starter-zuul该模块不仅包含了Netflix Zuul的核心依赖zuul-core,还包含下面的依赖:spring-cloud-starter-hystrix、spring-cloud-starter-ribbon、spring-cloud-starter-actuator。
3、使用注解@EnableZuulProxy开启Zuul的API网关注解。
4、配置application.properties文件

server.port=9000

spring.application.name=api-geteway
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka/

二、请求路由
1、传统路由方式

zuul.routes.api-a-url.path=/api-a-url/**
zuul.routes.api-a-url.url=http://localhost:9888
2、面向服务的路由

  • 为了与Eureka整合,需要添加Eureka依赖
zuul.routes.api-a.path=/api-a/**
zuul.routes.api-a.serviceId=helloservice

zuul.routes.api-b.path=/api-b/**
zuul.routes.api-b.serviceId=feignconsumer

SpringCloud微服务实战之网关服务zuul

三、请求过滤
请求路由建立之后,客户端可以通过统一的API网关接口访问服务,但是不同的客户端的访问权限有差异,所以需要过滤请求。
zuul提供了ZuulFilter来实现过滤和拦截,我们只需要继承ZuulFilter类并实现他定义的4个抽象函数就可以实现过滤了。

package com.spring.springcloud.filter;

import com.netflix.zuul.ZuulFilter;

public class MyFilter extends ZuulFilter {

    @Override
    public Object run() {
        //实现过滤规则
        return null;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public String filterType() {
        return null;
    }

}
  • filterType:过滤器类型,决定过滤器在什么生命周期里执行。

    PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。

    ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。

    POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。

    ERROR:在其他阶段发生错误时执行该过滤器

  • filterOrder 过滤器执行顺序,当请求一个阶段中存在多个过滤器时,需要根据该方法的返回值来判断执行顺序。

  • shouldFilter 判断过滤器是否被执行,返回true代表执行。
  • run 过滤器执行的具体规则。

过滤器定义完成后,还需要再主类中添加如下才能启动过滤器。

    @Bean
    public MyFilter myFilter(){
        return new MyFilter();
    }
相关标签: spring-cloud zuul