nacos2.0.0版本bug记录一下

开头

  • 之前个人在使用nacos 2.0.0版本作为注册中心时,发现在nacos客户端查询注册成功且非default_group组的服务时会响应500。
    在这里插入图片描述
    在这里插入图片描述
  • 刚开始我还以为是我项目有配置错误,后来检查本地配置也没有发现问题。所以感觉很奇怪,就只有跟着nacos服务端源码看一下请求接口,这样就发现了nacos的一个bug <_<。

中间

  • 首先从github上下载nacos 2.0.0分支版本代码,然后本地运行起来。因为nacos默认是集群启动,所以我们本地启动服务时需要加启动参数:-Dnacos.standalone=true,单机启动模式。出现下面界面就表示启动成功,访问:http://localhost:8848/nacos/index.html,进入nacos可视化界面。
    在这里插入图片描述
  • 现在我们可以去找到之前请求响应500的接口:http://192.168.0.128:8848/nacos/v1/ns/catalog/service?serviceName=user&groupName=DEV_GROUP&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYxNDI0MzA1MX0.hrOK7ec9WOFa4e8_86fnnM5kU-ED5uprnQNPHZ_x2gM&namespaceId=6920d843-2f88-4e3e-8532-4e5ce04b5eed,但是nacos服务端对参数进行了重新组装。
    在这里插入图片描述
  • 这里经过过滤器进行重新赋值后的结果如下:
    在这里插入图片描述
  • 在controller层已经对参数进行了一些处理,根据serverName获取对应的serviceNameWithoutGroup和groupName值
    在这里插入图片描述
  • 这里进行参加解析后直接调用了实现层接口方法,现在进入实现层看看代码是怎么处理的。
    在这里插入图片描述
  • 这里因为参数在controller已经经过一次解析,这里再次调用NamingUtils.getGroupName(serviceName)方法返回的就是DEFAULT_GROUP(这个方法的参数不管是serviceName,还是groupName返回的都是DEFAULT_GROUP,所以这里的bug主要不是参数问题,而是根本就不应该再次调用这个方法),所以得到的Service对象和我们保存的服务实例对象集合里的key不一致,所以就直接抛异常了。
  • 然后其实这个bug的解决方式很简单,就是这里不调用NamingUtils.getGroupName()和NamingUtils.getServiceName()方法即可。
    在这里插入图片描述
    在这里插入图片描述
  • 在这个接口后面的实现里还有因为参数再次解析而导致的问题。就是这个接口能请求成功,但是响应的内容是有问题,就像上图里分组显示的还是DEFAULT_GROUP,其实应该是DEV_GROUP。
    在这里插入图片描述
    在这里插入图片描述

最后

  • 到现在这里问题基本修复完成。本想着到github上看看nacos源码还有没有这个bug,如果还存在这个问题那我也可以提出问题并指出修复方法,那么也算支持并完善nacos这个开源框架。结果我还真找到了这个问题并且也已经修复。
    在这里插入图片描述
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页