一、新建gateway项目
二、添加依赖
dependencies {implementation 'org.springframework.cloud:spring-cloud-starter-gateway:4.0.0'
}
三、增加路由规则配置
一个web服务、一个service服务
bootstrap.yaml:
server:port: 80
spring:application:name: gatewaycloud:nacos:discovery:server-addr: ${NACOS_ADDR:127.0.0.1:8848}namespace: ${NACOS_NAMESPACE:demo}username: nacospassword: nacosconfig:#nacos配置中心服务器地址server-addr: ${NACOS_ADDR:127.0.0.1:8848}#nacos配置中心命名空间namespace: ${NACOS_NAMESPACE:demo}#文件后缀格式file-extension: yaml#nacos配置中心分组group: ${spring.application.name}username: nacospassword: nacos#扩展文件,目前用于全局共享,下面的优先级高ext-config:- data-id: commom.yamlgroup: commonrefresh: true
application.yaml:
spring:main:web-application-type: reactivecloud:gateway:routes:#业务服务- id: web_routeuri: lb://webpredicates:- Path=/web/**filters:- RewritePath=/(?<segment>.*),/$\{segment}#支撑服务- id: service_routeuri: lb://servicepredicates:- Path=/service/**filters:- RewritePath=/(?<segment>.*),/$\{segment}
四、增加过滤器(可选)
比如认证、鉴权、日志打印等
例如:打印日志,用@Slf4j
注解来简化日志记录、
增加依赖
compileOnly 'org.projectlombok:lombok:1.18.24' // 使用最新版本annotationProcessor 'org.projectlombok:lombok:1.18.24'implementation 'org.slf4j:slf4j-api:2.0.6'runtimeOnly 'ch.qos.logback:logback-classic:1.4.5'
代码:
@Slf4j
@Component
public class RequestLogFilter implements GlobalFilter, Ordered {private static final String START_TIME_KEY = "startTime";@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();String method = Objects.requireNonNull(request.getMethod()).name();String requestURI = request.getPath().toString();String remoteAddr = Objects.requireNonNull(request.getRemoteAddress()).getHostString();System.out.println("method=" + method +";requestURI= "+ requestURI+ "; remoteAddr="+remoteAddr);log.info("method=" + method +";requestURI= "+ requestURI+ "; remoteAddr="+remoteAddr);return chain.filter(exchange);}@Overridepublic int getOrder() {return 1;}
}
五、增加启动类并运行测试
@SpringBootApplication(scanBasePackages = {"com.example"})
@EnableDiscoveryClient
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}}
运行访问,用80端口
六、遇到的问题
1、启动报错
缺少依赖的包
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2024-07-16T16:27:44.792+08:00 ERROR 9924 --- [gateway] [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***************************
APPLICATION FAILED TO START
***************************Description:Web application could not be started as there was no org.springframework.boot.web.reactive.server.ReactiveWebServerFactory bean defined in the context.Action:Check your application's dependencies for a supported reactive web server.
Check the configured web application type.