SpringCloudGateway路由失效问题

 更新时间:2024年10月31日 14:27:12   作者:Xiao_zuo_ya  
本文主要分析了SpringCloudGateway整合nacos时路由失效的问题,作者通过断点跟踪发现在RouteToRequestUrlFilter类中报错,原因是在读取配置文件的时候,没有解析到对应的host主机,进一步发现这里包含了一段正则表达式验证,验证配置的服务名称是否合法

SpringCloudGateway整合nacos路由失效

报错如下

java.lang.IllegalStateException: Invalid host: lb://mall_admin_service

负载均衡配置的没有问题,对应的服务名称也没有问题,断点跟踪了一下,在这个RouteToRequestUrlFilter类中报错,

代码很简单

		if ("lb".equalsIgnoreCase(routeUri.getScheme()) && routeUri.getHost() == null) {
			// Load balanced URIs should always have a host. If the host is null it is
			// most
			// likely because the host name was invalid (for example included an
			// underscore)
			throw new IllegalStateException("Invalid host: " + routeUri.toString());
		}

在读取配置文件的时候,没有解析到对应的host主机

		private static final String SCHEME_REGEX = "[a-zA-Z]([a-zA-Z]|\\d|\\+|\\.|-)*:.*";
		static final Pattern schemePattern = Pattern.compile(SCHEME_REGEX);
		// 部分代码截取
		if (hasAnotherScheme(routeUri)) {
			// this is a special url, save scheme to special attribute
			// replace routeUri with schemeSpecificPart
			exchange.getAttributes().put(GATEWAY_SCHEME_PREFIX_ATTR,
					routeUri.getScheme());
			routeUri = URI.create(routeUri.getSchemeSpecificPart());
		}

这里包含了一段正则表达式验证,验证配置的服务名称是否合法,很明显我们的是以下划线配置的,所以验证失败,URI.create创建的时候host解析失败配置为空的。

也能了解了一下SpringCloudGateWay实现原理,所有的过滤器均以GlobalFilter 的子接口实现,同样是一些列的过滤器链。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • IDEA中JDK是1.8但Java版本只有21和17的解决办法

    IDEA中JDK是1.8但Java版本只有21和17的解决办法

    JDK 1.8(Java Development Kit 1.8)是Java平台的一个版本,它包含了用于开发和运行Java应用程序的工具和库,下面这篇文章主要给大家介绍了关于IDEA中JDK是1.8但Java版本只有21和17的解决办法,需要的朋友可以参考下
    2024-01-01
  • 浅谈Java中的n种随机数产生办法

    浅谈Java中的n种随机数产生办法

    众所周知,随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相同的:产生一个0到1之间的随机数。看似简单,但有时我们也会忽略了一些有趣的功能。
    2015-09-09
  • maven打包失败踩坑的解决方式详解

    maven打包失败踩坑的解决方式详解

    最近因为新项目有很多自定义的jar包,而且占内存很多,就直接拷贝过来,新开了一个maven仓库,用的时候没有问题,但是打包一直编译不通过,下面这篇文章主要给大家介绍了关于maven打包失败踩坑的解决方式,需要的朋友可以参考下
    2023-05-05
  • 使用WebMvcConfigurer配置SpringMVC过程

    使用WebMvcConfigurer配置SpringMVC过程

    WebMvcConfigurer配置类用于Java代码配置SpringMvc,实现该接口或继承WebMvcConfigurationSupport类,常用方法:addInterceptors(拦截器)、addViewControllers(视图控制器)等
    2024-12-12
  • Java集合案例之斗地主游戏

    Java集合案例之斗地主游戏

    这篇文章主要为大家详细介绍了Java集合案例之斗地主游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Spring MVC获取参数和自定义参数类型转换器及编码过滤器

    Spring MVC获取参数和自定义参数类型转换器及编码过滤器

    这篇文章主要为大家详细介绍了Spring MVC获取参数和自定义参数类型转换器及编码过滤器,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-06-06
  • Java基础详解之集合框架工具Collections

    Java基础详解之集合框架工具Collections

    这篇文章主要介绍了Java基础详解之集合框架工具Collections,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-04-04
  • Java中synchronized正确使用方法解析

    Java中synchronized正确使用方法解析

    这篇文章主要介绍了Java中syncronized正确使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • SpringBoot项目中使用Swagger2及注解解释的详细教程

    SpringBoot项目中使用Swagger2及注解解释的详细教程

    Swagger2是一个开源项目,用于为RESTful Web服务生成REST API文档,下面这篇文章主要给大家介绍了关于SpringBoot项目中使用Swagger2及注解解释的详细教程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Mybatis之动态sql标签的使用

    Mybatis之动态sql标签的使用

    这篇文章主要介绍了Mybatis之动态sql标签的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论