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

springCloud(踩坑)springCloud-gateway配合Nacos访问接口404,503

请检查您是否设置了服务提供者的**全局路径映射**

首先大家都知道springCloudAlibaba + Nacos是依靠spring.application.name进入服务注册的;
我们如果设置了servlet.context.path 则正常的接口就变成了${context.path}/api

我出现404的问题是:

  • 服务端接口:user/getWay

并且配置了servlet.context.path=user-center则接口访问为:user-center/user/getWay

  • gateway映射:user-center/**
  • nacos的服务名为user-center
  • 而gateway实际的重写规则是:把服务名user-center去掉,即访问如下:
    接口user-center/user/getWay --> gateway访问接口user/getWay
  • 解决方案:我们可以重写路径 …如下

项目架构:

1、服务提供接口

因为使用Nacos是通过服务名注册,所以必须配置
spring.application.name=user-center
在这里插入图片描述
在这里插入图片描述

2、gateway调用配置

在这里插入图片描述
在这里插入图片描述

分析1、正常的访问方式(我们预想到的):

# 请求gateway服务器
http://localhost:8888/user-center/user/get/100
# 对应nacos user-center服务提供者的接口
http://localhost:7000/user/get/100

请检查是否设置了全局路径前缀,例如设置了servlet.context.path
所以上面服务提供者的接口就变成了
http://localhost:7000/user-center/user/get/100

分析结果!!!!

所以这时候我们还是调用gateway服务就显示404

http://localhost:8888/user-center/user/get/100

gateway中的user-center是路径断言里面的,可以自定义匹配

解决!!!

解决一:

# 这样是可以访问到的,/-_-||
http://localhost:8888/user-center/user-center/user/get/100

user-center/user/get/100由于我们不小心设置了全局路径映射,所以服务访问地址是这个
前面的user-center才是gateway路由匹配地址

解决二:

重写访问地址(已经设置了全局路径映射,推荐

spring:
  cloud:
    # Spring Cloud Gateway 配置项,对应 GatewayProperties 类
    gateway:
      # 路由配置项,对应 RouteDefinition 数组
      routes:
        - id: user
          uri: lb://user-center
          predicates:
            - Path=/user-api/user/**
          filters:
          #这里重写了跳转地址,转成真实的user-center;也可以自定义地址
            - RewritePath=/user-api/user(?<remaining>/?.*), /user-center/user${remaining} 
        - id: baidu # 路由的编号
          uri: https://www.baidu.com # 路由到的目标地址
          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
            - Path=/baidu1
          filters: #过滤器,对请求进行拦截,实现自定义的功能。Gateway 内置了多种 Filter 的实现,提供了多种请求的处理逻辑,比如说限流、熔断等等。
            - StripPrefix=1
            # 这里配置的 StripPrefix 会将请求的 Path 去除掉前缀。
            # 例如:我们以第一个 Route 举例子,假设我们请求 http://127.0.0.1:8888/baidu1 时:
            # 如果有配置 StripPrefix 过滤器,则转发到的最终 URI 为 https://www.baidu.com,正确返回首页
            # 如果未配置 StripPrefix 过滤器,转发到的最终 URI 为 https://www.baidu.com/baidu1,错误返回 404
      discovery: # Gateway 与 Spring Cloud 注册中心的集成
        locator:
          enabled: true
          # lb:// 前缀,表示将请求负载均衡转发到对应的服务的实例。
          # "'lb://' + serviceId" Spring EL 表达式,将从注册中心获得到的服务列表,每一个服务的名字对应 serviceId,最终使用 Spring EL 表达式进行格式化。
          url-expression: "'lb://' + serviceId" # 路由的目标地址的表达式,默认为 "'lb://' + serviceId"

我们配置的gateway匹配地址为
http://localhost:8888/user-api/user/getWay
经过 RewritePath 重写,真实请求的地址为
http://localhost:7000/user-center/user/getWay

如果解决了你的问题,右下角在这里插入图片描述

相关文章:

  • 数据格式转换篇---VOC(xml)标注格式转换为YOLOv5(txt)
  • Codeforces Round #816 (Div. 2)
  • 高数---曲线积分
  • uniapp 悬浮球
  • 统计耗时 System.currentTimeMillis()
  • 阿里巴巴java方向笔试题 带详细答案
  • (二)springcloud实战之config配置中心
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • 升级pip 升级pip3的快速方法
  • 【CDGP】如何识别主数据?
  • 南大通用的GBase 8s 图形化管理工具介绍
  • 通过 MSE 实现基于Apache APISIX的全链路灰度
  • 神经网络优化算法有哪些,人工神经网络优化算法
  • 使用python-docx完成word操作
  • Interactive Tools Recommendation System integrating QT/ROS /Pytorch
  • php的引用
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • hadoop集群管理系统搭建规划说明
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • MQ框架的比较
  • nginx 负载服务器优化
  • python3 使用 asyncio 代替线程
  • SpringCloud集成分布式事务LCN (一)
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 大快搜索数据爬虫技术实例安装教学篇
  • 分布式事物理论与实践
  • 服务器从安装到部署全过程(二)
  • 算法系列——算法入门之递归分而治之思想的实现
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转)四层和七层负载均衡的区别
  • (转载)Linux网络编程入门
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net Application的目录
  • .Net Core和.Net Standard直观理解
  • .Net MVC4 上传大文件,并保存表单
  • .NET MVC第五章、模型绑定获取表单数据
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 中让 Task 支持带超时的异步等待
  • .NET连接MongoDB数据库实例教程
  • .skip() 和 .only() 的使用
  • [ IO.File ] FileSystemWatcher
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [hdu 3652] B-number
  • [JAVA设计模式]第二部分:创建模式
  • [NOIP 2003] 栈(三种方法:DP、数论、搜索)
  • [puppet]如何设置全局exec path
  • [python]基本输出输入函数
  • [RK3566-Android11] 关于 a2dpsink -蓝牙支持接收播放/无PIN码连接