Skip to content

框架上报版本号

概念阐述

为方便治理,使用ServiceComb进行开发,会将当前使用的ServiceComb版本号上报至服务中心,并且支持其他框架集成ServiceComb时上报其他框架的版本号。

示例代码

步骤1 首先实现开源框架ServiceComb的Versions接口,实现该接口下的loadVersion方法,即可将版本名称和版本号作为键值对返回

public class MyVersion implements Versions{
  @Override
  public Map<String, String> loadVersion() {
    Map<String, String> map = new HashMap<>();
    map.put("My", this.getClass().getPackage().getImplementationVersion());
    return map;
  }
}

步骤2 为了使用SPI机制让该返回对象被ServiceComb读取到,需要在META-INF中增加services文件夹,并在其中增加一个文件,以所实现接口x.x.x.Versions(带包名)为名,以具体实现类x.x.x.CseVersion(带包名)为内容

当服务注册到ServiceCenter时,会携带所有版本号信息

{
  "serviceId": "xxx",
  "appId": "xxx",
  "registerBy": "SDK",
  "framework": {
    "name": "servicecomb-java-chassis",
    "version": "My:x.x.x;ServiceComb:x.x.x"
  } 
}
  • 备注

上报的版本号可以自定义,也可以从pom或jar包的MANIFEST.MF里读取,如果使用.class.getPackage().getImplementationVersion()从MANIFEST.MF获取版本号,则需要在pom文件中把maven-jar-plugin的archive元素addDefaultImplementationEntries和addDefaultSpecificationEntries设置为true

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
        <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
      </manifest>
    </archive>
  </configuration>
</plugin>