springcloud集成gateway
本篇文章只介绍gateway模块的搭建步骤,并无gateway详细介绍
gateway详解请查看:SpringCloudGateway官方文档详解
前置处理
父模块中已指定版本
不知道如何选择版本看这篇:
手把手教你梳理springcloud与springboot与springcloudalibaba的版本对应关系
一. Gateway模块引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency><!--客户端负载均衡loadbalancer-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
注意:gateway无需引入spring-boot-starter-web,因为gateway内部集成了Netty服务器,启动会报错
二. 配置 bootstrap.yml 文件(nacos作为注册中心)
这里是引入nacos,gateway具体配置可以放在nacos配置中心
spring:application:name: gatewayprofiles:active: devcloud:nacos:username: nacospassword: nacosdiscovery:# 命名空间namespace: 26dc328e-87e1-4ebb-9882-e46aa0cfbf0c# 同一个项目下的服务,要在同一个分组下,相互间才能通信group: dev# nacos服务端server-addr: 127.0.0.1:8848config:# nacos服务端server-addr: 127.0.0.1:8848# 分组group: dev# 命名空间namespace: 26dc328e-87e1-4ebb-9882-e46aa0cfbf0c# 配置文件类型file-extension: yaml# 读取公用配置shared-configs:- data-id: common-dev.yamlgroup: devrefresh: true
三. nacos配置中心中对应gateway配置文件
server:port: 7000spring:cloud:# 动态路由gateway:discovery:locator:# 开启从注册中心动态创建路由的功能,利用微服务名进行路由enabled: true# 表示将请求路径的服务名配置改成小写 ,因为服务注册的时候,向注册中心注册时将服务名转成大写的了lowerCaseServiceId: true# 若配置路由URI为lb,则注册中心服务名称不能和server.servlet.context-path名称一致,否则contextPath会被改写为空字符串;加上这一行配置可以解决问题filters:- StripPrefix=0# 路线routes:- id: admin # 路线ID,保持唯一# 表示使用负载均衡策略,admin是服务IDuri: lb://admin# uri: http://localhost:7001# predicates定义了路由的匹配条件,这里使用的是路径匹配,所有以/admin/开头的请求都会被路由到admin服务。predicates:- Path=/admin/**- id: memberuri: lb://memberpredicates:- Path=/member/**- id: netdiskuri: lb://netdiskpredicates:- Path=/netdisk/**- id: bloguri: lb://blogpredicates:- Path=/blog/**- id: thirdpartyuri: lb://thirdpartypredicates:- Path=/thirdparty/**# 处理跨域请求globalcors:corsConfigurations:'[/**]':allowedHeaders: "*" # 允许所有请求头allowedOriginPatterns: "*" # 允许所有请求源#- "http://www.baidu.com" # 允许特定请求源allowCredentials: true # 允许发送CookieallowedMethods: # 允许所有请求方法- GET- POST- DELETE- PUT- OPTION
四. 检查gateway是否配置成功
还用这篇文章的测试接口 springcloud项目引入naocs2.x
admin模块有一个测试接口,直接调用的连接为
http://localhost:7001/admin/nacos/getCommonNacosConfig
用gateway转发的连接为
http://localhost:7000/admin/nacos/getCommonNacosConfig
五. 问题汇总
1. context-path和application.name一致问题:
若配置路由URI为lb,则注册中心服务名称不能和server.servlet.context-path名称一致,否则contextPath会被改写为空字符串;
解决方案:
- context-path和application.name设置为不同
- filters:
- StripPrefix=0
- filters[0]:
- StripPrefix=PreserveHostHeader
参考文章:https://blog.csdn.net/weixin_43303455/article/details/122279447
2. Whitelabel Error Page This application has no configured error view, so you are seeing this as a fallback.
原因是缺少负载均衡依赖
解决方法:gateway模块引入spring-cloud-starter-loadbalancer依赖
<!--客户端负载均衡loadbalancer-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>