apache / apache/servicecomb-java-chassis
[BUG] - 契约加载问题
- 主要语言
- Java
- 星标
- 1.9k
- 派生
- 814
- 平均合并
- 8 天 23 小时
- 30 天内合并 PR
- 1
描述
### Steps to Reproduce
一、问题
1. 设置versionRule=0.0.0.0+,而非latest
2. B作为服务端,高版本离线,低版本在线,且低版本存在新接口,
A作为消费端,测试调用新接口的情况,报契约问题;
将B的低版本号改为更高版本号,测试通过。
二、怀疑原因
在findLatest函数中只加载了最大版本的契约,不符合文档描述
findLatest:170, MicroserviceVersionRule (org.apache.servicecomb.registry.consumer)
initData:150, MicroserviceVersionRule (org.apache.servicecomb.registry.consumer)
createDataByOtherRule:229, MicroserviceVersionRule (org.apache.servicecomb.registry.consumer)
日志打印:
[oup0-1-thread-1] [ MicroserviceVersions] --- create MicroserviceVersionRule, appId=XXX, microserviceName=XXX, versionRule=0.0.0.0+.
三、文档描述
https://servicecomb.incubator.apache.org/references/java-chassis/2.x/zh_CN/build-consumer/with-contract.html
version-rule是版本匹配规则,有四种格式:
精确版本匹配:例如version-rule: 0.0.1,表示只匹配版本号为0.0.1的服务提供者
后续版本匹配:例如version-rule: 1.0.0+,表示匹配版本号大于或等于1.0.0的服务提供者
最新版本:version-rule: latest,表示匹配最新版本的服务提供者
版本范围:例如1.0.0-2.0.2,表示匹配版本号在1.0.0至2.0.2之间的服务提供者,包含1.0.0和2.0.2
此配置项默认为latest
### Expected Behavior
期望在配置0+的versionRule时,能加载所有契约或加载在线实例的契约
### Servicecomb Version
2.8.24
### Additional Context
业务有诉求,不能保证单个微服务每次升级的版本号是递增的
_No response_
贡献指南
这个仓库没有索引到贡献指南
调研方向
Start by reading findLatest, initData, and createDataByOtherRule in MicroserviceVersionRule, then compare their behavior with the linked version-rule documentation. Reproduce the 0.0.0.0+ case using the stated online and offline service versions. Done means the configured rule loads the contracts needed for the new interface and the consumer call succeeds.
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- java
- 领域
- backend-api-design, distributed-systems
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100