springCloud主版本Greenwitch SR2  gateway版本2.1.2

网上大多教程是添加如下一段代码,然后就可以在网关拿到真实路由ip而不是路由id

但是网上教程杂七杂八,我也不记得我是抄的哪的了,然后他这个办法是直接用自定义过滤器重写了源码的 LoadBlancerClientFilter类,下图为源码

也就是这里的时候网关将注册服务的路由id改换成目标服务的ip+port+路径

然后我的自定义过滤器如下

直接重写源码LoadBlancerClientFilter,这里有一点,自定义过滤器重写LoadBlancerClientFilter之后,定义的Ordered不能小于10000

因为重写判断依据是根据

exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR);

来做的处理,源码中这个attribute的值是在RouteToRequestUrlFilter这个过滤器中才放进去的,这个过滤器的order是10000,如果小于这个数在这之前执行,那GATEWAY_SCHEME_PREFIX_ATTR这个key将无法获取

而且因为源码中的LoadBlancerClientFilter不再执行,所以

这段关键代码将不执行,然后转发的请求将会维持lb://route-id/xxx/xxx这种形式发送,结果就是。请求404

自定义过滤器-1,然后debug改写转发路由的代码

没有看到有对应gatewayRequestUrl的attribute,正常情况应该是这样的

所以自定义过滤器如果是extends LoadBlancerClientFilter的话,切记切记,order不能小于10000,当然,

如果是老老实实的实现GlobalFilter和Ordered接口的话,order优先级高了你只是无法获取到请求真实目标IP,不会影响到路由转发,网上获取真实ip的例子似乎都没太关注这个东西,要么0或者-1,-2的

这里多一句嘴,源码中替换路由id为真实ip的逻辑我没去研究,但是如果配置文件中不写当前服务的discovery-ip的话,源码的替换会直接默认网关所在机器的ip(主要是nacos,eureka时代没有实际分离服务器部署服务,不知道啥效果)

最近又升级了下整个微服务全家桶,当心会出什么幺蛾子,顺道也试了下

cloud  Greenwich.SR2——>Hoxton.SR8

gateway 2.1.2 ——>2.2.5

spring boot  2.1.6.RELEASE ——>2.3.4.RELEASE

alibaba cloud——>2.2.3.RELEASE

nacos 2.1.0.RELEASE——>1.3.2

本质上没有太大区别,除了要废弃LoadBlancerClientFilter,使用流行的Reactive式之外,好像没太大改动

以上就是填坑的记录,主要问题是在抄别人代码的时候,没太关注写法,以及那弱不起眼的order值,导致在搭新版的时候将自定义过滤器的order设为-2,然后一直拿不到目标服务的真实IP之后才去看了下源码

顺便吐槽一句,spring系列的官方文档啥时候能国际化一下下,英文看的脑阔真是咋咋疼,是咱中国不够大还是spring社区的中国人不够多啊,怎么说几乎中文也算世界第二大语言了,真就后妈养的呗.......

spring cloud gateway获取真实ip以及跨服务器时路由转发的一些问题相关推荐

  1. Spring Cloud Gateway网关实现短网址生成、解析、转发

    Spring Cloud Gateway网关实现短网址生成.解析.转发 1.概述 2.基础实现 3.路由处理HandlerFunction 4.配置路由 5.测试 1.概述 在一些生成二维码等场景中, ...

  2. 网关 跨域_好文推荐:微服务网关实战—Spring Cloud Gateway

    作者:博云BoCloud| 前言 作为Netflix Zuul的替代者,Spring Cloud Gateway是一款非常实用的微服务网关,在Spring Cloud微服务架构体系中发挥非常大的作用. ...

  3. Spring Cloud Gateway 3.1.3最新版中文手册官网2022

    Spring Cloud Gateway 3.1.3 该项目提供了一个库,用于在 Spring WebFlux 之上构建 API 网关.Spring Cloud Gateway 旨在提供一种简单而有效 ...

  4. Spring cloud gateway 详解和配置使用

    spring cloud gateway 介绍 1. 网关是怎么演化来的 单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务 注:图片来自网络 2. 网关的基本功能 网关核心功能是路 ...

  5. 第五章 微服务网关Spring Cloud Gateway

    5.1 微服务网关简介 第三章我们介绍了通过Spring Cloud LoadBalancer实现了微服务之间的调⽤和负载均衡,以及使⽤Spring Cloud OpenFeign声明式调⽤,那我们的 ...

  6. 微服务网关Zuul迁移到Spring Cloud Gateway

    https://juejin.im/post/5ba8daa56fb9a05cfe486ebf 背景 在之前的文章中,我们介绍过微服务网关Spring Cloud Netflix Zuul,前段时间有 ...

  7. Spring Cloud Gateway(路由)

    本篇文章主要介绍了什么是 Spring Cloud Gateway,并基于 Spring Cloud Gateway 的 Finchley.RC1 版本编写一个 Spring Cloud Gatewa ...

  8. Spring Cloud Gateway 原理与应用场景

    why 为什么需要网关? 如图可知: 在常规没有网关的情况下,无法对多个服务进行统一的处理,比如我需要做统一的鉴权,这时候需要在每个服务上增加鉴权功能来达到目的,工作量大且不好维护 在有网关的情况下, ...

  9. Spring Cloud Gateway配置详解-过滤器

    Spring Cloud Gateway-过滤器 本节将为大家详细介绍Spring Could Gateway 内置过滤器相关内容. Spring Cloud Gateway 过滤器为大家提供了修改特 ...

最新文章

  1. 一款N-沟道耗尽型JFET晶体管 MPF102
  2. http://nlp.stanford.edu:8080/parser/index.jsp
  3. ios 设置按钮不可见_iOS的五大设计原则:统一化和适应化原则
  4. 深入react技术栈(1):React简介
  5. 在线RGB和HEX十六进制颜色互转工具
  6. 数字摄像机常见术语和参数介绍
  7. 第九章-安装RPM包或源码包
  8. python是一种什么类型的植物_植被类型预测
  9. SpringBoot中post请求报405错误排坑
  10. 【ESP 保姆级教程】玩转emqx认证篇④ ——使用 Redis 的密码认证
  11. 两个向量组线性相关是不是也能说成两个向量组等价 向量组等价 线性相关 向量组等价和矩阵等价的区别
  12. 大数据技术之Hadoop3.x
  13. 武大博士后应聘社区社工引热议,内卷还是人各有志?
  14. bzoj2119 股市的预测
  15. python中shutil是什么意思_python之shutil模块详解
  16. 毕业设计 单片机智能灌溉系统 - 物联网 嵌入式
  17. 【运筹学】对偶理论 : 对偶性质 ( 对称性质 | 对称性质推导 )
  18. 从SRCNN到EDSR,总结深度学习端到端超分辨率方法发展历程 2018.11 写的还可以
  19. 高德地图根据经纬度调用api报错Uncaught Error: USERKEY_PLAT_NOMATCH(10009)
  20. 音频信号处理(二)语音信号采集处理与基音周期

热门文章

  1. 大屏用户有福了,vivo大屏旗舰被“猪队友”爆光,售价9999元?
  2. 名帖347 怀素 草书《大草千字文》
  3. 数字图像处理:使用直方图统计进行图像增强
  4. Bootstrap系列之模态框(Modal)
  5. 无线上网设备大集合,看看你的设备最适合哪种?
  6. 撒克逊人:XSLT处理器的剖析
  7. 红帽RHCE考试下午-RHCE (RH294)任务概览[2021最新版]
  8. AUTOCAD使用笔记
  9. MIT CMS.300 Session 5 – UNWRITTEN RULES 游戏的潜在规则
  10. 计算两个向量的逆时针夹角