微服务整合Spring Cloud Gateway动态路由

前置

创建 Spring Cloud项目

参考:创建Spring Cloud Maven工程-CSDN博客

1. 创建一个maven jar类型项目

在idea中右键父工程-》New-》Module

创建一个maven工程

2. 引入相关依赖

在POM文件中引入下面的依赖

复制代码
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.szc</groupId>
        <artifactId>spring_cloud_demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>gateway</artifactId>
    <packaging>jar</packaging>

    <dependencies>
        <!--springcloud 依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </build>
</project>

3. 创建配置文件

在resources下创建bootstrap.yml配置文件

复制代码
server:
  port: 10005

spring:
  application:
    name: sky-gateway
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
      config:
        # 配置中心地址
        server-addr: ${spring.cloud.nacos.discovery.server-addr}
        # 配置中心的文件格式
        file-extension: yml

注意引入了nacos依赖后,在启动时会自动往从nacos服务器拉取下面3个配置文件,可以在启动日志看到

配置文件名称和服务名以及文件后缀是有关系的,默认是

服务名

服务名+后缀

服务名-激活的配置+后缀

在nacos上新建 sky-gateway.yml文件,如下图所示

文件内容为

复制代码
spring:
  cloud:
    gateway:
      discovery:
        locator:
          lowerCaseServiceId: true #服务名转小写
          #enabled: true #开启自动路由发现
      routes:
        - id: sky-system #id 唯一即可
          uri: lb://sky-system #lb://服务名,表示请求会负载均衡到sky-system服务
          predicates:
            - Path=/system/** # 表示访问/system开头的api会转发到sky-system服务
        - id: sky-product #id唯一即可
          uri: lb://sky-product # lb://服务名
          predicates:
            - Path=/product/** #表示访问/product开头的api会转发到sky-product服务

说明

下面的一段内容表示访问/system开头的api会转发到sky-system服务

uri: lb://sky-system #lb://服务名,表示请求会负载均衡到sky-system服务

predicates:

  • Path=/system/**

重启gateway

4. 测试

访问:http://localhost:10005/system/getUserBuy?userId=19 即可访问到sky-system的接口

5. 完成

相关推荐
chanalbert7 小时前
SpringBoot设计基石:约定优于配置与模块化架构
spring boot·spring·spring cloud
在未来等你1 天前
互联网大厂Java求职面试:云原生架构与微服务设计中的复杂挑战
java·微服务·ai·云原生·秒杀系统·rag·分布式系统
zfj3211 天前
什么时候使用微服务,什么时候不用
微服务·架构
jarenyVO1 天前
Spring Cloud Gateway 全面学习指南
java·gateway
RexTechie1 天前
Spring Cloud Alibaba 中间件
java·spring cloud·中间件
RexTechie1 天前
Spring Cloud 原生中间件
spring·spring cloud·中间件
程序猿DD1 天前
告别微服务,迎接SCS(Self-Contained Systems)?新概念还是炒冷饭?
后端·微服务·架构
腾讯云中间件1 天前
限流系列之一:微服务常见限流方案及TSF限流原理
微服务·腾讯
一眼万年041 天前
Redis单机模式
redis·微服务
掘金-我是哪吒2 天前
分布式微服务系统架构第145集:Jeskson文档-微服务分布式系统架构
分布式·微服务·云原生·架构·系统架构