> 技术文档 > SpringCloudGateWay 使用nacos网关自动负载均衡

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 成功!