兼容Grains
当现有的Grains激活将要处理请求时,运行时将检查请求中的版本与Grains的实际版本是否兼容。Orleans不会在运行时推断要使用哪个策略,确定两个版本是否兼容的默认行为由GrainVersioningOptions.CompatibilityStrategy
向后兼容(默认)
定义
如果满足以下条件,则Grain接口版本Vn可以与Vm向后兼容:
- 接口名称未更改(或覆盖的类型代码)
- Vm版本中存在的所有公共方法都在Vn版本中。重要的是,不要修改从Vm继承的方法的签名。:由于Orleans使用内部内置的序列化程序,因此修改/重命名字段(甚至私有)可能会使序列化中断。
由于Vn与Vm相比可以增加其他方法,因此Vm与Vn不兼容。
例
如果在集群中,给定接口有两个版本,即V1和V2,并且该V2向后兼容V1:
- 如果当前激活为V2,而请求的版本为V1,则当前激活将能够正常处理请求
- 如果当前激活为V1,而请求的版本为V2,则将取消激活当前激活,并创建与V2兼容的新激活(请参见版本选择器策略)。
完全兼容
定义
如果满足以下条件,则Grains接口版本Vn可以与Vm完全兼容:
- Vn与Vm向后兼容
- 在Vn版本中未添加任何公共方法
如果Vn与Vm完全兼容,则Vm也与Vn完全兼容。
例
如果在集群中,给定接口有两个版本,即V1和V2,并且该V2与V1完全兼容:
- 如果当前激活为V2,而请求的版本为V1,则当前激活将能够正常处理请求
- 如果当前激活为V1,而请求的版本为V2,则当前激活也将能够正常处理请求