概念阐述

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

示例代码

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

  1. public class MyVersion implements Versions{
  2. @Override
  3. public Map<String, String> loadVersion() {
  4. Map<String, String> map = new HashMap<>();
  5. map.put("My", this.getClass().getPackage().getImplementationVersion());
  6. return map;
  7. }
  8. }

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

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

  1. {
  2. "serviceId": "xxx",
  3. "appId": "xxx",
  4. "registerBy": "SDK",
  5. "framework": {
  6. "name": "servicecomb-java-chassis",
  7. "version": "My:x.x.x;ServiceComb:x.x.x"
  8. }
  9. }
  • 备注

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

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-jar-plugin</artifactId>
  4. <configuration>
  5. <archive>
  6. <manifest>
  7. <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
  8. <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
  9. </manifest>
  10. </archive>
  11. </configuration>
  12. </plugin>