You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@servicecomb.apache.org by "liubao (Jira)" <ji...@apache.org> on 2019/10/26 03:58:00 UTC

[jira] [Updated] (SCB-1524) support register schema when old schema already exists

     [ https://issues.apache.org/jira/browse/SCB-1524?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

liubao updated SCB-1524:
------------------------
    Fix Version/s:     (was: service-center-1.3.0)
                   java-chassis-1.3.0

> 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)