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

Reply via email to