微服务(三)服务网关——Zuul(Zuul 代理其他服务、简单的权限校验、其他配置和访问路径的顺序问题)、Gateway(Gateway 中的各种配置、Filter(转发路由时,自动的额外添加参数))

6 篇文章 5 订阅
5 篇文章 1 订阅

微服务(三)服务网关——Zuul(Zuul 代理其他服务、简单的权限校验、其他配置和访问路径的顺序问题)、Gateway(Gateway 中的各种配置、Filter(转发路由时,自动的额外添加参数))

一、Zuul——服务网关

在微服务里面,服务网关相当于是必备的组件。

Zuul 是 Netflix 公司提供的网关服务。因为从某个时间开始闭源了,所以用的人越来越少,加上性能不如 gateway。

说到网关,面试最经常问的就是 Zuul 和 Gateway 的区别:Zuul 相当于同步会阻塞的 servlet,请求到网关以后,Zuul 会自己维护一个线程池,从线程池拿出一个线程来处理这个请求,接着这个请求会发到某一个服务中去,接着这个服务各种处理最后响应到 Zuul,Zuul 再把数据返回给浏览器。从头到尾用的都是一个子线程,子线程处理完以后最后会被释放。这个是 Zuul 的特点,处理并发能力很弱;如果线程池只有 100 个线程,那么就只能处理 100 个请求。

gateway 就不一样,类似于异步 servlet,虽然请求到了 gateway 以后,也是会从线程池分配一个线程处理请求,但不是直接用线程处理,而是先用线程收到请求,接着这个线程立马 new 一个子线程,由这个子线程去做后面的事情。接着原本的那个线程立马会被释放,就不需要去等。

1、引言和介绍

在这里插入图片描述

Zuul 的功能:

  • 权限控制,可以做认证和授权
  • 监控
  • 动态路由
  • 负载均衡
  • 静态资源处理

Zuul 中的功能基本上都是基于过滤器来实现,它的过滤器有几种不同的类型:

  • PRE
  • ROUTING
  • POST
  • ERROR

在微服务里面,可以同时使用 nginx 和 服务网关,这两者不冲突。对编程来说 nginx 不太方便,只能配置不能加功能,所以一般不会用。使用这个 SpringCloud 的网关的话,加功能就比较容易。

2、前期准备

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这基本配置就好了。

3、开始使用 Zuul 代理其他服务

只要一启动,这个 Zuul 会自动的注册到 eureka 中,然后会自动的查找有哪些服务注册到 eureka 中;默认情况下会自动的给 eureka 中所有的服务自动的代理。

以后想要访问 eureka 中的服务时,不需要直接去输入服务的地址了,只需要按照既定的规则,去访问这个 Zuul 就可以了,Zuul 会自动的把请求转发到对应的服务中去。

这里测试一下以前已经有的接口(原本是 storage 的):
在这里插入图片描述

这里经过网关访问:
在这里插入图片描述

4、通过 Zuul 做简单的权限校验

创建一个类,继承 ZuulFilter 类:
在这里插入图片描述
在这里插入图片描述

效果:
当地址栏不带 token=123 时,会被拦截:
在这里插入图片描述

带了 123 时:
在这里插入图片描述

5、Zuul 的其他配置和访问路径的顺序问题

在这里插入图片描述
针对最后的访问路径的问题,如果要实现有序的,就通过 yaml 来实现,比如这样:
在这里插入图片描述

二、Gateway——服务网关

1、引言和介绍

特点:

  • 限流
  • 路径重写
  • 动态路由
  • 集成 Spring Cloud DiscoveryClient
  • 集成 Hystrix 断路器

和 Zuul 对比:

  1. Zuul 是 Netflix 公司的开源产品,Spring Cloud Gateway 是 Spring 家族中的产品,可以和Spring 家族中的其他组件更好的融合。
  2. Zuul1 不支持长连接,例如 websocket。
  3. Spring Cloud Gateway 支持限流。
  4. Spring Cloud Gateway 基于 Netty 来开发,实现了异步和非阻塞,占用资源更小,性能强于Zuul。

注意:Gateway 明显优于 Zuul 的一个特性是并发能力特别特别强! Zuul 是同步的,Gateway 是异步的并发强,响应式的。

Gateway 有两种使用方式:
一:通过代码来配置。
二:通过 yaml 来配置

2、前期准备

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、配置 Gateway

a、properties 配置

参考下方配置(这个配置的麻烦,所以据说一般不用):
在这里插入图片描述

b、yaml 配置

在这里插入图片描述

c、java 代码配置

首先,因为 Gateway 跟 SpringMVC 是对立的,MVC 是阻塞的 web 框架,而 Spring Reactive Web 是响应式,异步处理的框架。所以这两个只能用一个,所以这里要去掉 mvc 的依赖:
在这里插入图片描述

然后:

在这里插入图片描述

最后,通过 yaml 来配置:
在这里插入图片描述

这里的意思是访问某一个接口,然后把这个接口转发到 uri 里面的网页中来:
访问的路径:
在这里插入图片描述

效果:
在这里插入图片描述

d、通过时间匹配

在这里插入图片描述
表示,请求时间在 2021-01-01T01:01:01+08:00[Asia/Shanghai] 时间之后,才会被路由。
除了 After 之外,还有两个关键字:

  • Before,表示在某个时间点之前进行请求转发
  • Between,表示在两个时间点之间,两个时间点用 , 隔开

e、通过请求方式匹配

也可以通过请求方式匹配,就是请求方法:
在这里插入图片描述

f、通过请求路径匹配

在这里插入图片描述
表示路径满足 /2019/0612/ 这个规则,都会被进行转发,例如:
在这里插入图片描述

g、通过参数进行匹配

在这里插入图片描述
表示请求中一定要有 name 参数才会进行转发,否则不会进行转发。

也可以指定参数和参数的值。

例如参数的 key 为 name,value 必须要以 java 开始:

在这里插入图片描述

h、多种匹配方式

多种匹配方式也可以组合使用。
在这里插入图片描述

4、Filter(转发路由时,自动的额外添加参数)

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值