java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Zuul服务网关

SpringCloud之Zuul服务网关详解

作者:疯狂的帆

这篇文章主要介绍了SpringCloud之Zuul服务网关详解,服务网关是微服务架构中一个不可或缺的部分,通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制(鉴权)等功能,需要的朋友可以参考下

ZUUL服务网关是什么

服务网关是微服务架构中一个不可或缺的部分。

通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制(鉴权)等功能。

Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。

ZUUL官网:https://github.com/Netflix/zuul

ZUUL服务架构

在这里插入图片描述

在这里插入图片描述

ZUUL 路由(Router)

ZUUL的简单使用

1)新建一个服务

在这里插入图片描述

2)引入依赖

<!-- zuul依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!-- 导入eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

3)编写启动类

@SpringBootApplication
@EnableEurekaClient // 开启Eureka客户端
@EnableZuulProxy    // 开启服务网关
public class ZuulApp {
    public static void main(String[] args) {
        System.out.println("Zuul网关服务启动。。。8885");
        SpringApplication.run(ZuulApp.class, args);
    }
}

4)配置zuul

server.port=8885
spring.application.name=springcloud-zuul-gateway
# springcloud-consumer:指定路由ID,名字是自定义的
# path:映射的地址
zuul.routes.springcloud-consumer.path=/consumer/**
# url:springcloud-consumer实际的服务地址,写服务名即可
zuul.routes.springcloud-consumer.url=springcloud-consumer
# 让zuul去eureka获取服务
# 获取服务列表的周期
eureka.client.registry-fetch-interval-seconds=5
# eureka的服务地址
eureka.client.service-url.defaultZone=http://eureka-8888:8888/eureka/
# 当调用getHostname获取实例的hostname时,返回ip而不是host名称
eureka.instance.prefer-ip-address=true
# 指定ip地址
eureka.instance.ip-address=127.0.0.1

5)测试

先启动 eureka服务,再启动其他服务

在这里插入图片描述

访问 //localhost:8885/consumer/queryUserList

在这里插入图片描述

可以看出,zuul服务网关已经可以正常运作了。

这便是 ZUUL服务网关中路由(Router)的功能。接下来我们来了解zuul的另一大功能—过滤器(Filter)。

ZUUL 过滤器 Filter

zuulFilter的使用场景

  1. 请求鉴权:一般放在pre类型,如果发现没有访问权限,直接就拦截了
  2. 异常处理:一般会在error类型和post类型过滤器中结合来处理。
  3. 服务调用时长统计:pre和post结合使用。

filter的类型

Filter 的生命周期

Filter 的生命周期有 4 个,分别是 “PRE”、“ROUTING”、“POST” 和“ERROR”。

  1. PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
  2. ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用 Apache HttpClient 或 Netfilx Ribbon 请求微服务。
  3. POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的 HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
  4. ERROR:在其他阶段发生错误时执行该过滤器。 除了默认的过滤器类型,Zuul 还允许我们创建自定义的过滤器类型。例如,我们可以定制一种 STATIC 类型的过滤器,直接在 Zuul 中生成响应,而不将请求转发到后端的微服务。

在这里插入图片描述

Zuul中Filter的默认执行顺序

在这里插入图片描述

到此这篇关于SpringCloud之Zuul服务网关详解的文章就介绍到这了,更多相关Zuul服务网关内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文