【十】SpringCloud Alibaba之整合gateway(包括配置详解以及各种坑)

简介: 【十】SpringCloud Alibaba之整合gateway(包括配置详解以及各种坑)

一、新建gateway子工程

       在前面章节里面,我们已经建了一个父子工程项目,这里直接接着整,新增一个子模块(demo-gateway),最终目录结构如下:

二、引入依赖

       下面开始吐槽这个依赖引入的坑,很耗时间去解决,各种报错。

       注意坑点(希望下次我遇到时,可以快速解决报错吧):

  • 1、gateway模块的pom不要去继承父工程的pom,父工程的pom依赖太多,极大可能会导致运行报错,新建gateway子工程后,pom父类就采用默认的spring-boot-starter-parent即可。
  • 2、在gateway自己的pom文件引入依赖,如下:
  • 4、在gateway自己的pom文件不要引用MVC的依赖包,不然会报错
  • 5、网上根据报错查了很多解决方案,比如在pom文件里额外添加feign的依赖,或者更换cloud和springboot的版本,或者排除什么依赖,结果都会出现“解决当前问题,出现新的问题”。如上解决方案,本人可行。(再次总结需要注意点:不要集成父工程的pom,不要引入MVC的依赖,只引入nacos-discovery和gateway依赖即可)。

三、改造gateway子模块

       依赖问题解决后,就可以成功运行gateway模块了,前提是nacos已经开启了。

       然后开始改造gateway,使之与其他模块构成关联,具体如下:

  • 在gateway模块启动类上加上@EnableDiscoveryClient注解。
  • 修改yml配置文件,可以交给nacos管理,此处为了方便,直接写在本地yml配置里,如果不知道怎么使用nacos上的配置文件,可以回顾前面章节。接着说,修改yml文件后,结果如下:

       此处配置将当前模块跑到nacos注册中心,然后开启gateway的注册中心路由功能(后面演示两种gateway的路由功能)。

四、演示开启nacos注册中心路由功能效果

       gateway可以通过routes和nacos的路由功能实现路由功能,现在展示一下nacos的路由功能效果。

      通过如下方法开启的路由功能:

gateway: discovery: locator: enabled: true #开启注册中心路由功能

       他的大概流程是这样的:

       所以,在每次请求时请务必带上服务名,因为gateway需要去找nacos注册中心进行匹配。演示效果如下:

1、我运行了如下三个服务:

2、直接请求provider服务的接口:

3、通过网关请求provider服务的接口:


五、演示自定义路由配置效果

       上面第四点演示了默认通过注册中心实现网关路由的功能,下面第五点演示不通过第四点,而是自己通过routes配置自定义的路由策略,如下:

       注意:若要使用自定义配置,则“不能开启注册中心的路由功能”,否则自定义的策略会失效,学习时给我坑惨了,百度也没找到问题,解决注释了开启注册中心的路由功能的配置,自定义的配置就生效了。

先写一个配置,再进行描述,配置如下:

如上图所示,可以看到在routes里面,我新增了两组配置,里面涉及到了四个属性

  • id:可以理解为是这组配置的一个id值,请保证他的唯一的,可以设置为和服务名一致。
  • uri:可以理解为是通过条件匹配之后需要路由到(跳转,重定向)到的新的服务地址。
  • predicates:可以理解为是编写条件,满足条件才进行uri。
  • filters:可以理解为是在路由前对请求的地址进行额外的其他操作,例如拼接或者裁减等。

两组配置是针对consumer服务和provider服务的,后面测试就针对consumer服务进行测试。

针对id为consumer的配置,解读一下配置的流程:

1、首选gateway网关接受向他发来的请求。

2、他拿到请求去匹配路径中是否含有/nacos-consumer,如果含有就将请求路由到nacos-consumer服务,lb://表示开启负载均衡策略去路由。

3、路由之前拿到的路径可以看到(/nacos-consumer)正是目标服务的服务名,直接拿去请求肯定不行,路径不存在,所有需要先去掉这部分(/nacos-consumer)。

4、于是在filters中使用StripPrefix去截取第一部分,StripPrefix表示(请求中剥离的路径个数,从左到右),剩下的地址拿去请求就是正常的了。

流程图如下:

1、直接请求consumer服务的接口:

2、通过网关请求consumer服务的接口:

       由此可见,自定义的配置是有效果的,在此再测试一下predicates是否起效果,修改配置如下:

       从上面可以得知,我的目标服务是nacos-consumer,此处修改后的流程应该是,只有请求路径中包含nacos-consumer1111,才会路由到nacos-consumer这个地址,下面进行测试:

       可见,现在访问同样的接口,gateway已经不给我们路由跳转了,说明predicates是有效果的,再测试filters是否起效果,如下请求:

我在filters中的配置就是,删除第一个路径,可见filters也是有效的。

六、演示自定义不通过服务名进行路由

       为了加深一下自定义配置的用法,下面思考一下如何通过网关请求consumer服务的接口,在请求路径上不加上consumer的服务名,结果如下即可:

       所以改造配置文件后,结果如下:

1、直接请求consumer服务的接口:

2、通过网关请求consumer服务的接口:

结果:只通过接口地址,通过网关访问目标服务成功。

本章讲解的是gateway对于断言(predicates)、过滤器(filters)的基本用法的事例,还有更多用法,可以面向百度继续学习。

————————————————————完毕————————————————————


目录
相关文章
|
2月前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
156 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
15天前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
|
2月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
2月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2月前
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
2月前
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
26天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
255 7
|
2月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
343 13
Spring Cloud Alibaba:一站式微服务解决方案
|
2月前
|
JavaScript Java Kotlin
深入 Spring Cloud Gateway 过滤器
Spring Cloud Gateway 是新一代微服务网关框架,支持多种过滤器实现。本文详解了 `GlobalFilter`、`GatewayFilter` 和 `AbstractGatewayFilterFactory` 三种过滤器的实现方式及其应用场景,帮助开发者高效利用这些工具进行网关开发。
299 1
|
3月前
|
负载均衡 Java API
项目中用的网关Gateway及SpringCloud
Spring Cloud Gateway 是一个功能强大、灵活易用的API网关解决方案。通过配置路由、过滤器、熔断器和限流等功能,可以有效地管理和保护微服务。本文详细介绍了Spring Cloud Gateway的基本概念、配置方法和实际应用,希望能帮助开发者更好地理解和使用这一工具。通过合理使用Spring Cloud Gateway,可以显著提升微服务架构的健壮性和可维护性。
76 0