当前位置: 首页 > news >正文

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>

相关文章:

  • 将Sqlite3数据库挂在内存上处理
  • 【STM32系列】利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程)
  • GPU并行计算的深度学习pyTorch环境搭建
  • WinForm 防破解、反编译设计文档
  • Git 与 Git常用命令
  • SpringBoot
  • 麒麟操作系统-Redis5二进制安装
  • fatal: unable to access ‘https://github.com/xxx/‘: SSL peer certificat
  • 单片机之基本元器件的工作原理
  • pytest测试专题 - 1.2 如何获得美观的测试报告
  • 《OpenCV》——特征提取与匹配方法
  • SQL-leetcode—1407. 排名靠前的旅行者
  • 3.3 学习UVM中的uvm_driver 类分为几步?
  • override 关键字的作用
  • nodejs 037: Js Worker线程消息传递 Worker.postMessage() Worker.postMessage()
  • Unity Dots理论学习-4.ECS有关的模块(3)
  • 厘米和磅的转换关系
  • AI-Engine-Direct-Helper 快速上手及环境配置
  • FPGA简介|结构、组成和应用
  • C++、Dijkstra实现导航系统设计——课设
  • 京东CEO许冉:外卖日单量接近2000万单,看到外卖对平台拉动和转化效应
  • 中国创面修复学科发起者之一陆树良教授病逝,享年64岁
  • 中国潜水救捞行业协会发布《呵护潜水员职业健康安全宣言》
  • 商务部新闻发言人就中美日内瓦经贸会谈联合声明发表谈话
  • 从采购到销售!市场监管总局指导行业协会防控肉品风险
  • 教育部基础教育教指委:稳步推进中小学人工智能通识教育