Spring Cloud 微服务项目实战
姚秋辰(姚半仙)
PayPal 研发经理
15862 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
结束语 (1讲)
Spring Cloud 微服务项目实战
15
15
1.0x
00:00/00:00
登录|注册

25 | 微服务网关:Gateway 中的路由和谓词有何应用?

你好,我是姚秋辰。
在上节课中,我们了解了 Spring Cloud Gateway 网关在微服务架构中的定位,我还介绍了 Gateway 的三大核心组件路由、谓词和过滤器的基本概念。今天,我们就来进一步认识 Gateway 的内置功能,了解在 Gateway 中如何声明一个路由,以及路由中的谓词判断逻辑有什么作用。
Spring Cloud Gateway(以下简称 Gateway)提供了非常丰富的内置谓词,你可以通过内置谓词来构建复杂的路由条件,甚至连“整点秒杀”这个场景都能在网关层做控制。这些内置谓词就像乐高积木一样,你可以随意组合在自己的业务逻辑中,构建五花八门的网关层判断逻辑。如果这还不够,那么 Gateway 还提供了自定义的谓词工厂扩展点,让你构建自定义谓词。
由于这些个谓词都要附着于一个路由之上,所以在介绍谓词之前,我得先和你聊一下怎么声明一个路由。这一节不涉及微服务项目改造,只是让你能够用最直观的方式体验 Gateway 的功能特点。

声明路由的几种方式

在上一节中我们讲到,路由是 Gateway 中的一条基本转发规则。网关在启动的时候,必须将这些路由规则加载到上下文中,它才能正确处理服务转发请求。那么网关可以从哪些地方加载路由呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Spring Cloud Gateway是一个强大的微服务网关,本文深入介绍了其路由和谓词的应用。作者首先介绍了三种声明路由的方式:Java代码、yaml文件和动态路由。然后详细介绍了Gateway的内置谓词,包括寻址谓词、请求参数谓词和时间谓词,并通过代码示例展示了如何在路由中配置这些谓词。此外,作者还提到了动态路由的实现方式,以及如何通过Gateway的可扩展谓词工厂来实现自定义谓词逻辑。总之,本文深入浅出地介绍了Gateway网关的核心组件和功能特点,对于想要了解微服务网关的读者来说,是一篇值得阅读的技术文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring Cloud 微服务项目实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • peter
    请教老师几个问题啊: Q1:SpringCloud Gateway和zuul相比哪个更好 Q2:Gateway只对用户的请求起作用吗?对微服务之间的请求起作用吗? Q3:gateway路由的具体效果是什么? 比如这个路由: .path("/geekbang/**") .uri("http://time.geekbang.org") 其最终效果是什么? 是说请求的开头是“http://time.geekbang.org”,后面只要跟的是“/geekbang/**”就允许通过吗? 即完整的请求是“http://time.geekbang.org/geekbang/**”。 Q4:gateway路由信息中没有微服务的信息? 比如这个路由: .path("/geekbang/**") .uri("http://time.geekbang.org") Gateway的目的是将请求路由到某一个微服务,但这个路由中并没有微服务的信息啊。 Q5:actuator是SpringCloud的一个组件吗? Q6:声明路由的三种方式会混合使用吗? Q7:Nginx和Gateway可以合二为一吗? 情况1:去掉gateway,只有nginx,用户请求直接到nginx,nginx直接到微服务;情况2:去掉nginx,只有gateway,用户请求直接到gateway,gateway再到微服务。

    作者回复: Q1:无脑选Gateway Q2:服务间调用不经过gateway,是点对点 Q3:path里配置的是通配符,可以理解为正则表达式,路径要匹配pattern Q4:uri里指定微服务名称,后面课程会演示 Q3: Spring Boot组件 Q6:看个人习惯,经常混用 Q7:两者定位不同,不建议gatewa直接暴露在最外层,性能和nignx没有可比性

    2022-02-09
    5
  • hhhhhh
    微服务网关的作用,就是整合各个微服务功能,形成一套或多套系统 看了半天感觉好像是这意思

    作者回复: 可以看做是政府大楼的门卫,要找哪个部门领导都要从门卫这走,如果领导比较忙还会被门卫打发走(网关层限流)

    2022-05-30
    2
  • 威威威小哥
    老师,几个问题请教下 1. Gateway 转发到目标服务是重新发起一次http请求吗? 2. Gateway有没有类似舱壁模式, 如何防止一个下游服务不可用导致整个gateway雪崩? 3. 哪里可以学习gateway的内部细节?

    作者回复: yoyoyo,我好像漏了这个问题 1. 我提示同学一点哈,授人以渔。在请求处理的整个链路中,他要经历各种各样的谓词过滤器等等,这个请求其实是原始的请求。那怎么判定gateway在调用目标服务的时候,底层是采用什么方式呢?只要点击进uri()这个方法里,跟到底层的具体实现类顺藤摸瓜就知道了 2. gateway这里也可以在路由规则这一层设置各种限流降级,做保护 3. 真谛都在手里,在IDE里点进去gateway源码就明白了

    2022-03-04
    2
  • Charles
    请教老师,是否推荐使用谓词实现金丝雀测试方案?

    作者回复: 金丝雀是给大家熟悉负载均衡的一个小案例,在各个公司里通常会有专门的AB test或者灰度框架来实现线上验证,每个大厂有自己的黑科技组件。如果自己实现黑科技方案,确实是可以做个谓词来判断,但后面的服务转发流程还要再次定制,因为gateway默认情况下没有加入Nacos metadata的判断逻辑

    2022-02-10
    1
  • 微笑的起点
    老师,请教个问题,springcloudgateway配置几个路由来测试,每个路由地址首次访问都要比后面多将近500ms,调试发现某些filter耗时比较多,每个地址第二次访问都会快很多,这是什么原因呢

    作者回复: 首次调用涉及到一些初始化加载流程,是正常现象,ribbon也有这个首次调用超时的坑~

    2023-02-10归属地:浙江
  • 斜杠青年
    老师你好,我一直有一个疑问,nginx、gateWay、FeignClient 他们三者之间的分工怎么洋才是合理的,例如服务A于服务B之间的调用才用 Feign 进行 LB,还是A调用gateway 来进行转发合适?

    作者回复: 企业级服务内部也会有网络分区,对于同一个network zone内部服务之间的调用,不用绕geteway,就采用直连的方式A->B即可,这个也是注册中心的服务发现机制所要实现的效果。 但如果你要跨zone调用,或者由外网访问,则需要经过网关。nginx是最常见的一种高性能对外网关,搭配LVS做路由。而spring cloud gateway一般不直接对外暴露,通常躲在外部网关背后来桥接微服务

    2022-12-12归属地:贵州
    2
  • Geek_1aaf73
    请问下 半仙, 我们现在的架构是阿里云SLB-->NGINX--->微服务,缺少API网关, 我们这里准备开发自己的API网关,然后链路请求是阿里云SLB-->API网关-->微服务,请问这个架构是否OK? 相当于API网关替代的NGINX,API网关中包含了负载均衡,还可以配置限流、鉴权、路由等,希望这个条没理解错,求回复~

    作者回复: API网关前置的多层nginx路由的情况更常见一些,对于一些不使用阿里云计算资源的公司,也是买阿里系的高防再加上VIP+多级Nginx做前置的居多

    2022-08-17归属地:上海
  • swagger~
    请问老师同时满足两个路由是用order设置优先级吗

    作者回复: 对滴,可以使用order调整生效优先级

    2022-02-22
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部