2.0.1 升级 2.1.0指导

服务注册发现的变化

2.1.0 对服务注册发现进行了重构,提供了更好的接口 DiscoveryRegistration 方便开发者提供不同的实现。

在2.0.1及其之前的版本,服务中心(servicecomb-service-center)作为唯一的服务注册发现,不支持扩展,服务中心 还提供了一个本地版本的实现。具体有如下两种场景:

  • 使用服务中心: 这种场景不需要额外配置和引入依赖。
  • 使用本地注册发现

需要调用

    System.setProperty(LocalServiceRegistryClientImpl.LOCAL_REGISTRY_FILE_KEY, "registry.yaml");

启用本地注册发现,不需要额外配置依赖。

升级到 2.1.0 版本后, 这两种常见的使用方式调整如下:

  • 使用服务中心

引入依赖

    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>registry-service-center</artifactId>
    </dependency>
  • 使用本地注册发现

引入依赖

    <dependency>
      <groupId>org.apache.servicecomb</groupId>
      <artifactId>registry-local</artifactId>
    </dependency>

不需要设置 LOCAL_REGISTRY_FILE_KEY 变量。

2.1.0 需要显示的提供 pom 依赖,否则不依赖任何模块, 启动会失败。 同时引入服务中心和本地注册发现也是允许 的,可以通过配置项关闭其中的部分功能。

servicecomb.local.registry.enabled: true
servicecomb.service.registry.enabled: true

详细开发指南参考注册发现说明

服务注册发现 API 的变化

如果直接使用了 RegistryUtils 接口, 建议切换到 DiscoveryManager 或者 RegistrationManager, 尽管 RegistryUtils 接口仍然可以使用。

如果直接使用了 DiscoveryTreee 接口,2.1. 将服务发现的接口移动到了 org.apache.servicecomb.registry, 当出现编译错误的时候,重新 import 对应的新 package 类即可。

如果直接使用了 ServiceRegistry 接口, 2.1 将对应接口移动到了 RegistrationManager

参数校验的变化

参数校验失败,早期版本采用 ResourceBundleMessageInterpolator 来生成错误消息。 由于这个类依赖于 Expression Language 库,而这个库 JAVA 慢慢的不再提供支持,从 2.1.0 版本开始,切换为 ParameterMessageInterpolator 来生成错误消息。 然后系统删除来对于 jakarta.el 的依赖。

开发者仍然可以继续使用ResourceBundleMessageInterpolator 来生成错误消息。需要额外的做下面的配置:

  • 项目中引入依赖
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>jakarta.el</artifactId>
    </dependency>
  • 增加配置项
servicecomb:
  filters:
    validation:
      useResourceBundleMessageInterpolator: true

Logger 系统的变化

servicecomb 默认使用 Slf4j 记录日志,不集成具体实现,开发者可以通过引入具体的实现依赖使用不同的 Logger。 早期的版本 solution-basic 包含了 log4j2 的依赖, 2.1.0 移除了这部分依赖, 开发者如果通过这种方式 使用 log4j2 , 可能需要显示的增加 log4j2 的依赖, 比如:

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
    </dependency>