<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway-server-webflux</artifactId>
</dependency>
</dependencies>在 sca 下创建一个名为 sca-gateway 的子模块 pom.xml 如下
注意: 不要忘记将该模块添加进
sca的modules中
<?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
观察两个服务的控制台日志,请求会轮询分发到不同实例,实现负载均衡