Dw做网站怎么加logo,什么样的企业要做网站,寒亭营销型网站建设,商标logo一键生成器Gateway 转发请求至注册中心Nacos中的服务404问题
问题描述
一次练手项目中#xff0c;原本没问题并且测试过的gateway#xff0c;再次转发链接的时候返回404状态码。gateway和被调用模块的日志信息中均无报错信息。 其中网关最后给出的信息是#xff1a;Flipping propert…Gateway 转发请求至注册中心Nacos中的服务404问题
问题描述
一次练手项目中原本没问题并且测试过的gateway再次转发链接的时候返回404状态码。gateway和被调用模块的日志信息中均无报错信息。 其中网关最后给出的信息是Flipping property: login-module.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit 2147483647 问题排查
网关访问出现404状态码的情况无非从这三个方面去排查
1.网关问题
将gateway的配置转发文件改为
server:port: 8000
spring:application:name: gateway-modulecloud:nacos:discovery:server-addr: localhost:8848username: nacospassword: nacosgateway:httpclient:connect-timeout: 1000response-timeout: 5sdiscovery:locator:enabled: false #启用DiscoveryClient网关集成的标志,可以实现服务的发现#gateway 定义路由转发规则routes:#一份设定- id: baidu #唯一标识uri: http://www.baidu.com #访问的路径lb://负载均衡访问固定写法通过负载均衡调取所有设定中的一份predicates: #谓词判断是否匹配。用户请求的路径是否与...进行匹配如果匹配则可以访问否则就404- Path/**接着访问localhost:8000 。发现跳转百度页面成功。因此转发并没有问题。于是网关端可能出现的问题还剩下 路径匹配问题。
下面是我配置的网关转发部分
spring:application:name: gateway-modulecloud:nacos:discovery:server-addr: localhost:8848username: nacospassword: nacosgateway:httpclient:connect-timeout: 1000response-timeout: 5sdiscovery:locator:enabled: true #启用DiscoveryClient网关集成的标志,可以实现服务的发现#gateway 定义路由转发规则routes:#一份设定- id: login-module #唯一标识uri: lb://login-module #访问的路径lb://负载均衡访问固定写法通过负载均衡调取所有设定中的一份predicates: #谓词判断是否匹配。用户请求的路径是否与...进行匹配如果匹配则可以访问否则就404- Path/login/**与之匹配的是注册中心Nacos中的服务下的测试api 我这边就从简了
RestController
public class TestController {RequestMapping(/login/sout)public String sout(){return success;}
}请求的路径是http://127.0.0.1:8000/login/sout (gateway端口是8000服务模块的端口是8081)
通过比对发现路径匹配没有问题。
2. 服务注册失败
也就是说因为服务模块向服务注册中心注册失败导致网关查询服务中心中的服务时并没有查找到其中含有你匹配的模块服务名称从而导致匹配失败返回404状态码。
于是查看Nacos中服务发现列表这里同样从简只开了两个需要观测的模块 可以看出服务注册没有问题。
3.服务模块调用问题
也就是说是因为服务模块中的提供的请求路径本来就返回404访问不通。因为原先在这个模块中进行了Sa-Token的分布式鉴权所以将Maven依赖中的Sa-Token部分全部注释进行访问发现访问失败。 最终排查
经过业务部分和Controller部分代码检测过后发现并无问题。于是开始考虑是否是依赖间的冲突或者其他问题导致。此时我注意到服务模块启动后日志中仍有Sa-Token的Logo 这说明依赖中的Sa-Token并没有完全去除。于是我反复再次查看依赖发现这里的Sa-Token是由工具类中的。
在这里我将项目中的一些工具类和实体类全部抽离作为了一个工具模块此工具模块中的pom文件中因为偷懒所以将其他模块中的pom文件中的依赖项进行拷贝复制到了工具模块的pom文件中切记每个模块引入的依赖复制后需要仔细核对一遍。因此其中也带有Sa-Token的相关依赖。于是在服务模块中将工具模块中的Sa-Token的相关依赖去除
dependencygroupIdcom.utils/groupIdartifactIdutils/artifactIdversion0.0.1-SNAPSHOT/versionexclusionsexclusiongroupIdcn.dev33/groupIdartifactIdsa-token-dao-redis-jackson/artifactId/exclusionexclusiongroupIdcn.dev33/groupIdartifactIdsa-token-spring-boot-starter/artifactId/exclusionexclusiongroupIdcn.dev33/groupIdartifactIdsa-token-alone-redis/artifactId/exclusionexclusiongroupIdcn.dev33/groupIdartifactIdsa-token-core/artifactId/exclusion/exclusions/dependency再次进行测试发现仍然访问为404异常。
于是将所有业务与Controller代码全部注释最后只剩一个测试api返回success的字符串。进行测试后发现仍然访问不通。
因此想到是包没有被扫描到。于是查看启动类找到了原因
因为提取工具类时参照网上的博客中的做法在启动类上引入了
ComponentScan(basePackages com.utils)至此原因排查结束。因为ComponentScan 如果不设置basePackage的话 默认会扫描包的所有类如果设置了basePackage的话只会扫描设置路径下的包。从而导致了我们原来项目模块中的包并不会被扫描到。 改正
将启动类上的
ComponentScan(basePackages com.utils)去除即可。再次进行测试访问 http://127.0.0.1:8000/login/sout 跳转成功 总结
ComponentScan 如果不设置basePackage的话 默认会扫描包的所有类如果设置了basePackage的话只会扫描设置路径下的包。从而导致了我们原来项目模块中的包并不会被扫描到。
因此以后写的时候注意一下当然正式生产场景并不推荐你不写从而扫描所有的包而是应该将所有需要扫描的包全部写上去。
ComponentScan(basePackages {})填String数组 或者 用逗号隔开的String 都可以。为了idea显示兼容一点还是改成了 String数组