SpringCloudGateWay 使用nacos网关自动负载均衡
安装好nacos后(参考以前文章SpringCloud 使用nacos注册服务,使用openFeign调用服务-CSDN博客)
新建一个项目,添加
spring-cloud-starter-gateway-server-webmvc
spring-cloud-loadbalancer
spring-cloud-starter-alibaba-nacos-discovery
依赖,pom.xml参考
4.0.0 org.springframework.boot spring-boot-starter-parent 3.5.3 org.example gateway 0.0.1-SNAPSHOT gateway gateway 21 2025.0.0 org.springframework.cloud spring-cloud-starter-gateway-server-webmvc org.springframework.cloud spring-cloud-loadbalancer com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery 2023.0.3.3 org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-plugin
applocation.yaml设定nacos地址启动loadbalance
spring: application: name: gateway cloud: nacos: server-addr: 192.168.68.238:8848 loadbalancer: nacos: enabled: trueserver: port: 9999
项目启动后在nacos查看到网关服务和后端服务

路由方式有很多,可以在配置文件中声明也可以写配置类,另外新版本的springcloudgateway配置方式与老版本有变化,不需要实现GloalFilter,更清爽简单了
写一个配置类,添加@Configuration注解,在配置类中添加一个路由,在后端添加一个header,response添加一个返回header
package org.example.gateway;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.function.RouterFunction;import org.springframework.web.servlet.function.ServerResponse;import static org.springframework.cloud.gateway.server.mvc.filter.AfterFilterFunctions.addResponseHeader;import static org.springframework.cloud.gateway.server.mvc.filter.BeforeFilterFunctions.addRequestHeader;import static org.springframework.cloud.gateway.server.mvc.filter.LoadBalancerFilterFunctions.lb;import static org.springframework.cloud.gateway.server.mvc.handler.GatewayRouterFunctions.route;import static org.springframework.cloud.gateway.server.mvc.handler.HandlerFunctions.http;@Configurationclass RouteConfiguration { @Bean public RouterFunction gatewayRouterFunctionsAddReqHeader() { return route(\"test\") .GET(\"/**\", http()) .filter(lb(\"demo1\")) .before(addRequestHeader(\"token\", \"666\")) .after(addResponseHeader(\"powered\", \"666\")) .build(); }}
测试,访问http://localhost:9999/test,header中有666 成功!