servicecomb-java-chassis icon indicating copy to clipboard operation
servicecomb-java-chassis copied to clipboard

消费端调用服务端时偶现某契约ID对应的契约内容丢失

Open yanghao605 opened this issue 2 years ago • 1 comments

微服务初次调用时,会创建相应的MicroserviceVersion对象,并推送事件CreateMicroserviceVersionEvent,在ServiceRegistryListener中监听该事件,onCreateMicroserviceVersion方法中会遍历微服务的schemaId从注册中心获取对应的swagger,而在后续获取swagger的逻辑中,可能由于网络等原因导致本次获取swagger失败,从而返回一个null,而SDK是允许schemaId对应的swagger为null的情况,这就导致本地调用时获取微服务的信息是成功的,且存储在SDK的缓存中,不过若是调用到swagger为null的schemaId中的相关operation时,会失败。并且由于该缓存对应的revisionID在注册中心是没有变动的,所以后续的缓存更新中,当前所调用的微服务,其并不会更新,也就导致了微服务的某一schemaId对应的swagger内容持续丢失

yanghao605 avatar Oct 10 '22 01:10 yanghao605

我们客户端的契约校验 是否可以加个开关,有业务来控制是否开启

fanjiwang1992 avatar Oct 10 '22 08:10 fanjiwang1992

给了一个不是非常完美的修改: https://github.com/apache/servicecomb-java-chassis/pull/3413 。 完整修改需要做很多接口重构,比较麻烦。

liubao68 avatar Oct 21 '22 06:10 liubao68