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: gateway
  profiles:
    active: dev
  cloud:
    nacos:
      username: nacos
      password: nacos

      discovery:
        # 命名空间
        namespace: 26dc328e-87e1-4ebb-9882-e46aa0cfbf0c
        # 同一个项目下的服务,要在同一个分组下,相互间才能通信
        group: dev
        # nacos服务端
        server-addr: 127.0.0.1:8848

      config:
        # 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.yaml
            group: dev
            refresh: true

三. nacos配置中心中对应gateway配置文件

复制代码
server:
  port: 7000

spring:
  cloud:
    # 动态路由
    gateway:
      discovery:
        locator:
          # 开启从注册中心动态创建路由的功能,利用微服务名进行路由
          enabled: true
          # 表示将请求路径的服务名配置改成小写 ,因为服务注册的时候,向注册中心注册时将服务名转成大写的了
          lowerCaseServiceId: true
          # 若配置路由URI为lb,则注册中心服务名称不能和server.servlet.context-path名称一致,否则contextPath会被改写为空字符串;加上这一行配置可以解决问题
          filters:
           - StripPrefix=0

      # 路线
      routes:
        - id: admin # 路线ID,保持唯一
          # 表示使用负载均衡策略,admin是服务ID
          uri: lb://admin
          # uri: http://localhost:7001
          # predicates定义了路由的匹配条件,这里使用的是路径匹配,所有以/admin/开头的请求都会被路由到admin服务。
          predicates:
            - Path=/admin/**

        - id: member
          uri: lb://member
          predicates:
            - Path=/member/**

        - id: netdisk
          uri: lb://netdisk
          predicates:
            - Path=/netdisk/**

        - id: blog
          uri: lb://blog
          predicates:
            - Path=/blog/**

        - id: thirdparty
          uri: lb://thirdparty
          predicates:
            - Path=/thirdparty/**

      # 处理跨域请求
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedHeaders: "*" # 允许所有请求头
            allowedOriginPatterns: "*" # 允许所有请求源
            #- "http://www.baidu.com" # 允许特定请求源
            allowCredentials: true # 允许发送Cookie
            allowedMethods: # 允许所有请求方法
              - 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会被改写为空字符串;

解决方案:

  1. context-path和application.name设置为不同
  2. filters:
    • StripPrefix=0
  3. 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>
相关推荐
你喜欢喝可乐吗?16 小时前
RuoYi-Cloud 定制微服务
java·微服务·架构
武子康21 小时前
Java-75 深入浅出 RPC Dubbo Java SPI机制详解:从JDK到Dubbo的插件式扩展
java·分布式·后端·spring·微服务·rpc·dubbo
mit6.8241 天前
[AI-video] 数据模型与架构 | LLM集成
开发语言·人工智能·python·微服务
SoFlu软件机器人2 天前
3 分钟生成 Spring Cloud 微服务架构,标准目录 + 依赖配置,开箱即用
spring cloud·微服务·架构
大曰编程2 天前
分布式系统高可用性设计 - 监控与日志系统
微服务
DexterLien2 天前
API Gateway HTTP API 控制客户端访问 IP 源
http·gateway·aws·lambda·authorizer
allenXer2 天前
Spring Boot测试全景指南:JUnit 5 + Testcontainers实现单元与集成测试
spring boot·微服务·log4j
阿里云云原生3 天前
回归开源,两位 Java 和 Go 程序员分享的开源贡献指引
微服务·开源
麦兜*3 天前
SpringBoot 2.x→3.0升级实战:Jakarta EE兼容性改造清单
java·spring boot·后端·spring·系统架构·maven·springcloud
武子康3 天前
Java-71 深入浅出 RPC Dubbo 上手 父工程配置编写 附详细POM与代码
java·分布式·程序人生·spring·微服务·rpc·dubbo