Zuul服务网关的简单使用与相关知识点分析

本文介绍了Zuul作为服务网关的角色,包括如何搭建、配置路由规则,解决请求头过滤问题。深入探讨了Zuul的工作原理,强调其核心的过滤器机制,以及模拟鉴权登录的示例。最后总结了ZuulFilter的加载和执行流程。
摘要由CSDN通过智能技术生成

Zuul网关是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能 提供路由请求、鉴权、监控、缓存、限流等功能。

  • 主流的网关:
    Zuul、kong(基于Nginx的API gateway)、nginx+lua(是一个高性能的HTTP和反向代理服务器,lua是脚本语言,让Nginx执行Lua脚本,并且高并发、非阻塞的处理各种请求)

利用Zuul搭建服务网关:

  1. 搭建网关服务,引入依赖“spring-cloud-starter-netflix-eureka-client”和“spring-cloud-starter-netflix-zuul”
    (如果是使用Idea的Spring Initializr来搭建,则选中eureka client和zuul即可)
  2. 在application.yml中配置服务端口,如8070,以及注册中心
server:
  port: 8070

eureka:
  client:
    serviceUrl:
       defaultZone: http://localhost:8761/eureka/
  1. 在启动类中贴上@EnableZuulProxy注解,并启动

默认的启动访问网关的url访问网关的端口号,并且拼接上对应的资源路径,且在资源路径前加上应用的服务名称
如:

http://localhost:8070/product-server/api/v1/product/get?id=2
http://localhost:8070/order-server/api/v1/order/save?userId=1&productId=2

网关的配置

路由规则

默认的路由规则是使用服务名去访问,如“order-server”,“product-server”等。需要修改,那么就需要加上zuul.routes

zuul:
  routes:
    order-server-route: -- 这个可以随便写
      path: /order/**
      serviceId: order-server

这时候默认的“order-server”还是可以进行访问,如果不想要默认的访问,可以配置 zuul.routes.ignoredPatterns:=/*-server/**

zuul:
  routes:
    ignoredPatterns: /*-server/**
    order-server-route:
      path: /order/**
      serviceId: order-server
    product-server-route:
      path: /product/**
      serviceId: product-server

过滤请求头的问题

默认"Cookie", “Set-Cookie”, "Authorization"等值会被网关拦截,从而传到服务里面的是null值,在ZuulProperties中是默认配置的

private Set<String> sensitiveHeaders = new LinkedHashSet<>(Arrays.asList("Cookie", "Set-Cookie", "Authorization"));

如果需要取消,可以在配置文件中配置

zuul:
    sensitive-headers:  -- 配置为空,就相当于不拦截这些属性

Zuul的工作原理

可以参考 https://github.com/Netflix/zuul/wiki/How-it-Works

  • ZuulServlet
    Zuul服务其实就是以Servlet启动,也就是说,其底层是通过Servlet,在其service方法中可以看到执行流程逻辑,前置过滤器,路由过滤器,后置过滤器依次执行。最终是通过FilterProcessor执行类来进行过滤器的控制,调用,以及结果的操作运算。

上文说到Zuul提供路由请求、鉴权、监控、缓存、限流等功能(这些功能的启用与配置可以在网上直接搜索),而实现这些功能原理是过滤器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值