[
https://issues.apache.org/jira/browse/SCB-1524?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
liubao closed SCB-1524.
-----------------------
> support register schema when old schema already exists
> ------------------------------------------------------
>
> Key: SCB-1524
> URL: https://issues.apache.org/jira/browse/SCB-1524
> Project: Apache ServiceComb
> Issue Type: Improvement
> Components: Java-Chassis
> Reporter: liubao
> Assignee: liubao
> Priority: Major
> Fix For: java-chassis-1.3.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> Current:
> 1. java-chassiss: when serivce_description.environment=developement, will
> try to register and override the existing schema. or throw an error and abort
> startup.
> 2. service-center: when serivce_description.environment=developement, allow
> override existing schema, or return error.
>
> Future:
> 1. java-chassis: default as Current. User can add
> servicecomb.service.registry.instance.alwaysOverrideSchema = true, and
> java-chassis will try to register schema.
> 2. service-center: always allow to override schema.
>
> Why not doing so?
> 1. java-chassis default settings will allow user achieve the same features
> as before.
> 2. Now service-center and java-chassis check diffrent of schema is based
> on schema String content, but sometimes the SDK can not ensure the String
> content is the same, but the schema have the same syntax and interface. This
> happens in java-chassis that users do not define their POJO follow java POJO
> conventions and add extra gettter/setters without a field definistion. To
> make this code work, we need to change this behavior.
>
>
> 老版本:
> 服务中心:如果environment = Development , 调用registerSchema 接口, 覆盖契约;如果environment
> != Development , 调用 registerSchema 接口, 返回错误。
> SDK : 如果 environment = Development , 并且检测到本地契约和服务中心契约有差异(删除、修改、新增),则调用
> registerSchema 接口尝试覆盖或者新增契约;如果environment != Development,提示错误,不进行注册。
>
> 新版本:
> 服务中心:任何时候调用registerSchema 接口, 覆盖契约。
> SDK : servicecomb.service.registry.instance.alwaysOverrideSchema=
> false(默认),如果 environment = Development , 并且检测到本地契约和服务中心契约有差异(删除、修改、新增),则调用
> registerSchema 接口尝试覆盖或者新增契约;如果environment != Development,提示错误,不进行注册。
> servicecomb.service.registry.instance.alwaysOverrideSchema=
> true,检测到本地契约和服务中心契约有差异,打印警告,并调用registerSchema尝试注册。
>
> 注意事项:
> 以上的规则主要为了方便开发者日常开发。最佳实践是当微服务的接口存在变化的时候(新增、修改、删除),修改microservice.yaml中的service_description.version值,版本号递增。
>
> 服务发现过程不会实时监测契约的变化,只有当版本号变化的时候,才会拉取新的契约。在覆盖契约的场景下,如果Consumer先启动,Provider后启动,需要重启Consumer,才能够正常访问变化的Provider接口。
>
> servicecomb.service.registry.instance.alwaysOverrideSchema默认为false以保持兼容,只在新版本的时候,根据需要修改为true。老版本不使用这个配置项。
>
>
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)