Grain 接口版本控制
本文介绍如何使用 grain 接口版本控制。 Grain 状态的版本控制不在讨论范围之内。
概述
在给定的群集上,silo 可以支持不同版本的 grain 类型。
在此示例中,客户端和 Silo{1,2,3} 是使用 grain 接口 A
版本 1 编译的。 Silo 4 是使用 A
版本 2 编译的。
限制
- 无状态辅助角色上没有任何版本控制
- 流接口不进行版本控制
启用版本控制
如果未将版本特性显式添加到 grain 接口,则 grain 的默认版本为 0。 可以在 grain 接口上使用 VersionAttribute 对 grain 进行版本控制:
[Version(X)]
public interface IVersionUpgradeTestGrain : IGrainWithIntegerKey
{
}
其中 X
是 grain 接口的版本号,通常是单调递增的。
Grain 版本兼容性和放置
当来自受版本控制的 grain 的调用到达群集时:
默认情况下:
- 所有受版本控制的 grain 都只应后向兼容(请参阅后向兼容性指南和兼容的 grain)。 这意味着 v1 grain 可以调用 v2 grain,但 v2 grain 无法调用 v1。
- 群集中存在多个版本时,新激活将随机放置在兼容的 silo 上。
可以通过 GrainVersioningOptions 更改此默认行为:
var silo = new HostBuilder()
.UseOrleans(c =>
{
c.Configure<GrainVersioningOptions>(options =>
{
options.DefaultCompatibilityStrategy = nameof(BackwardCompatible);
options.DefaultVersionSelectorStrategy = nameof(MinimumVersion);
});
});
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈