相关issue:https://github.com/apache/dubbo/issues/9662
相关的PR:https://github.com/apache/dubbo/pull/9873
问题简述:MetadataService是Dubbo3.0的一个内部服务,主要提供看对服务元数据信息的操作能力。MetadataService的服务调用与正常的业务服务调用无异。目前所有正常的业务服务所代表的url都会携带ServiceModel,并且在发起服务调用时,会将url中的ServiceModel作为调用RpcInvocation携带的ServiceModel。但是MetadataService所代表的url却没有携带,具体可见MetadataUtils.java内的逻辑。
当用户配置了metadata-service-protocol: tri,也就意味着发起MetadataService服务调用采样了triple协议,而triple协议在调用时依赖了ServiceModel的相关信息。当发起MetadataService服务调用时,从invocation和url中没能拿到ServiceModel,从而报NPE。
如果需要修复这个问题,大致有三个方案:
会议纪要: