Spring Cloud Alibaba系列三:集成Gateway实现路由管理

文章目录

    • Spring Cloud Alibaba系列三:集成Gateway实现路由管理
      • 前言
      • 1、改造父项目 pom 文件
      • 2、创建 gateway 子 module
      • 3、配置yml文件

Spring Cloud Alibaba系列三:集成Gateway实现路由管理

spring cloud alibaba 版本对照

spring cloud alibaba 有严格的版本要求,所以一定要选对 spring cloud 版本,以及 spring boot 的版本

此系列文章的版本选取如下:

  • Spring Cloud 版本:Spring Cloud 2021.0.1
  • Spring Boot 版本:2.6.3
  • Spring Cloud Alibaba 版本:2021.0.1.0

Spring Cloud Alibaba系列一:nacos 注册中心

Spring Cloud Alibaba系列二:openFeign 实现服务间的通信

Spring Cloud Alibaba系列三:集成Gateway实现路由管理

Spring Cloud Alibaba系列四:集成 seata 实现分布式事务

前言

前两篇整合了nacos做为注册中心,openFeign实现服务间的通信,这篇记录整合Gateway做为整个路由的管理。

那么什么是Gateway

网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同层–应用层。

Gateway能用来干什么?

常见的作用有:

  1. 鉴权校验:验证是否认证和授权
  2. 统一入口:提供所有微服务的入口点,起到隔离作用,保障服务的安全性
  3. 限流熔断
  4. 路由转发
  5. 负载均衡
  6. 链路追踪

1、改造父项目 pom 文件

由于引入了Gateway,所以我们要把父项目的 pom文件里的 spring-boot-starter-web 的依赖删掉,依次在 customerprovider模块的pom文件里引入该依赖。否则启动 gateway 模块会报错。

>
    >org.springframework.boot>
    >spring-boot-starter-web>
>

2、创建 gateway 子 module

创建方式同创建其他两个module一样。创建完成之后修改该模块的 pom 文件。需要注意的是,由于common模块引入了mybatis-plus的依赖,所以在gateway的pom文件里如果要添加common模块的依赖,需要移除掉mybatis-plus,否则启动会报DataSource异常。

pom.xml内容如下:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>alibabaartifactId>
        <groupId>cn.xzfgroupId>
        <version>0.0.1-SNAPSHOTversion>
    parent>

    <modelVersion>4.0.0modelVersion>
    <artifactId>gatewayartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>gatewayname>

    <properties>
        <java.version>1.8java.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>cn.xzfgroupId>
            <artifactId>commonartifactId>
            <version>0.0.1-SNAPSHOTversion>
            <exclusions>
                <exclusion>
                    <groupId>com.baomidougroupId>
                    <artifactId>mybatis-plus-boot-starterartifactId>
                exclusion>
            exclusions>
        dependency>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-gatewayartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-loadbalancerartifactId>
        dependency>


    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

project>

另外一个要注意的是,如果在 yml 的配置文件里,配置 routes.uri 为 lb:// 的形式,需要加上loadbalance的依赖,否则启动访问,会 503

<!-- Feign Client for loadBalancing -->
>
    >org.springframework.cloud>
    >spring-cloud-loadbalancer>
>

原因如下:

由于从springcloud2020版本开始,弃用了Ribbon,因此Alibaba在2021及之后版本的 nacos 中删除了 Ribbonjar 包,因此无法通过 loadbalancer 路由到指定微服务。

3、配置yml文件

dev 的配置文件内容如下

url:
  base-url: 192.168.2.213

spring:
  cloud:
    nacos:
      discovery:
        #注册中心地址
        server-addr: ${url.base-url}
        username: nacos
        password: nacos
      config:
        #命名空间
        namespace: ${spring.profiles.active}
        file-extension: yaml
        #配置中心地址
        server-addr: ${url.base-url}
    gateway:
      routes:
        - id: provider
          uri: lb://provider
          predicates:
            - Path=/provider/**
          # 过滤器
          filters:
#            - StripPrefix=1 #转发之前去掉第一层路由
        - id: customer
          uri: lb://customer
          predicates:
            - Path=/customer/**
          # 过滤器
          filters:
#            - StripPrefix=1 #转发之前去掉第一层路由
  • routes:配置路由相关的内容
  • id:保持唯一即可
  • uri:可以是http://的形式,也可以是 lb://服务名称(lb://provider)。lb 指使用负载均衡的模式调用对应的服务
  • predicates:路由断言,判断那些url会转发到对应的服务去
  • filters:过滤器,对请求或响应做处理。

更多的配置可以参考 网关GateWay的使用详解、路由、过滤器、跨域配置

上述做完之后,就可以浏览器测试看看了。gateway 服务配置的端口号是8084
Spring Cloud Alibaba系列三:集成Gateway实现路由管理_第1张图片
依次启动 gatewayprovidercustomer 服务。
浏览器访问

1、http://localhost:8082/provider/demo/test
Spring Cloud Alibaba系列三:集成Gateway实现路由管理_第2张图片

2、http://localhost:8084/customer/demo/test

Spring Cloud Alibaba系列三:集成Gateway实现路由管理_第3张图片
3、http://localhost:8084/provider/demo/test

Spring Cloud Alibaba系列三:集成Gateway实现路由管理_第4张图片
8082 是正常访问 provider 服务的接口,8084 是 gateway 服务的端口,分别访问 customerprovider 的接口,发现都正确访问到了,自此集成gateway结束了。

实际上 gateway 还有更多的作用,这里只是简单的路由功能,而且路由功能里还可以传参数等操作,更多的功能值得你去挖掘。

上述就是 集成 gateway 的快速过程。

SpringCloudAlibaba系列demo (github.com)

你可能感兴趣的:(spring,cloud,alibaba,系列,spring,boot,java,spring)