2.0.1 升级 2.1.0指导
服务注册发现的变化
2.1.0 对服务注册发现进行了重构,提供了更好的接口 Discovery
和 Registration
方便开发者提供不同的实现。
在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>