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 的子接口实现,同样是一些列的过滤器链。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
springboot使用swagger-ui 2.10.5 有关版本更新带来的问题小结
这篇文章主要介绍了springboot使用swagger-ui 2.10.5 有关版本更新带来的问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12Spring Boot 整合mybatis 与 swagger2
之前使用springMVC+spring+mybatis,总是被一些繁琐的xml配置,还经常出错,下面把以前的一些ssm项目改成了spring boot + mybatis,相对于来说优点太明显了,具体内容详情大家通过本文学习吧2017-08-08
最新评论