树码科技 | 技术博客

微服务网关 Gateway 路由

2026/06/03
28
0

关键依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
    </dependency>
</dependencies>

创建网关服务

创建服务

  • sca 下创建一个名为 sca-gateway 的子模块 pom.xml 如下

注意: 不要忘记将该模块添加进 scamodules

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.lusifer</groupId>
        <artifactId>sca</artifactId>
        <version>${revision}</version>
    </parent>

    <artifactId>sca-gateway</artifactId>
    <packaging>jar</packaging>

    <name>${project.artifactId}</name>
    <description>网关模块</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
    </build>
</project>

创建启动类

package com.lusifer.sca.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {
  public static void main(String[] args) {
    SpringApplication.run(GatewayApplication.class, args);
  }
}

编写配置文件

创建 application.yml 配置文件,分步实现路由功能,由浅入深完成配置

server:
  port: 9010

spring:
  main:
    web-application-type: reactive
  application:
    name: sca-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.203.200:8848
        username: nacos
        password: 123456

网关路由配置

微服务名称路由

生产环境推荐使用服务名路由,配合 Nacos 实现动态服务发现,无需固定 IP:

server:
  port: 9010

spring:
  main:
    # 设置为响应式 Web 应用类型,支持高并发非阻塞 IO
    web-application-type: reactive
  application:
    name: sca-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.203.200:8848
        username: nacos
        password: 123456
    gateway:
      server:
        webflux:
          routes:
            # ------------------------------------------
            # 路由规则 1:service-provider 服务路由
            # 匹配路径:/provider/** → 转发至 service-provider 微服务
            # 示例:/provider/echo/hello → /echo/hello
            # ------------------------------------------
            - id: service-provider
              # lb:// 开头 + 微服务名称,开启负载均衡
              uri: lb://service-provider
              predicates:
                # 路径匹配规则:拦截所有 /provider/ 开头的请求
                - Path=/provider/**
              filters:
                # 去除路径前缀的第一层(去掉 /provider),再转发给目标微服务
                - StripPrefix=1
            
            # ------------------------------------------
            # 路由规则 2:service-consumer 服务路由
            # 匹配路径:/consumer/** → 转发至 service-consumer 微服务
            # 示例:/consumer/echo/hello → /echo/hello
            # ------------------------------------------
            - id: service-consumer
              uri: lb://service-consumer
              predicates:
                # 路径匹配规则:拦截所有 /consumer/ 开头的请求
                - Path=/consumer/**
              filters:
                # 去除路径前缀的第一层(去掉 /consumer),再转发给目标微服务
                - StripPrefix=1

配置完成后,通过网关地址访问后端服务:

  • 提供者服务:http://localhost:9010/provider/echo/hello

自动路由配置

开启 Nacos 自动路由功能,无需手动编写 routes 规则,Gateway 会自动根据服务名创建路由:

server:
  port: 9010

spring:
  main:
    # 设置为响应式 Web 应用类型,支持高并发非阻塞 IO
    web-application-type: reactive
  application:
    name: sca-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.203.200:8848
        username: nacos
        password: 123456
    gateway:
      server:
        webflux:
          discovery:
            locator:
              # 开启自动路由
              enabled: true
              # 服务名转为小写(推荐配置)
              lower-case-service-id: true

配置完成后,通过网关地址访问后端服务:

  • 提供者服务:http://localhost:9010/service-provider/divide?a=6&b=3

网关负载均衡

  • Gateway 结合 lb:// 协议,默认集成负载均衡功能,无需额外配置

  • 启动两个不同端口的提供者服务实例

  • 查看 Nacos 控制台,确认服务有 2 个实例

  • 反复通过网关访问接口:http://localhost:9010/service-provider/echo/hello

  • 观察两个服务的控制台日志,请求会轮询分发到不同实例,实现负载均衡