SpringCloudGateway路由失效问题
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的解决办法
JDK 1.8(Java Development Kit 1.8)是Java平台的一个版本,它包含了用于开发和运行Java应用程序的工具和库,下面这篇文章主要给大家介绍了关于IDEA中JDK是1.8但Java版本只有21和17的解决办法,需要的朋友可以参考下2024-01-01
使用WebMvcConfigurer配置SpringMVC过程
WebMvcConfigurer配置类用于Java代码配置SpringMvc,实现该接口或继承WebMvcConfigurationSupport类,常用方法:addInterceptors(拦截器)、addViewControllers(视图控制器)等2024-12-12
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
这篇文章主要为大家详细介绍了Spring MVC获取参数和自定义参数类型转换器及编码过滤器,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下2023-06-06
SpringBoot项目中使用Swagger2及注解解释的详细教程
Swagger2是一个开源项目,用于为RESTful Web服务生成REST API文档,下面这篇文章主要给大家介绍了关于SpringBoot项目中使用Swagger2及注解解释的详细教程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2023-04-04


最新评论