精細度介面版本設定

在本文中,您將會了解如何使用精細度介面版本設定。 精細度狀態的版本設定不在範圍內。

概觀

在指定的叢集上,定址接收器可以支援不同版本的精細度型別。

Cluster with different versions of a grain

在此範例中,用戶端和定址接收器 {1,2,3} 是使用精細度介面 A 第 1 版進行編譯。 定址接收器 4 已使用 A 第 2 版進行編譯。

限制

  • 無狀態背景工作角色上沒有版本控制
  • 串流介面未設定版本

啟用版本設定

如果未將版本屬性明確新增至精細度介面,則精細度的預設版本為 0。 您可以在精細度介面上使用 VersionAttribute 來設定版本精細度:

[Version(X)]
public interface IVersionUpgradeTestGrain : IGrainWithIntegerKey
{
}

其中 X 是精細度介面的版本號碼,通常是單純增加。

精細度版本相容性和位置

來自已設定版本精細度的呼叫抵達叢集時:

  • 如果沒有啟用存在,將會建立相容的啟用
  • 如果啟用存在:
    • 如果目前的版本不相容,將會停用,而且會建立新的相容版本 (請參閱版本選取器策略)
    • 如果目前的版本相容 (請參閱相容的精細度),則會正常處理呼叫。

預設情況:

  • 所有已設定版本的精細度都應該只回溯相容 (請參閱回溯相容性指導方針相容的精細度)。 這表示 v1 精細度可以呼叫 v2 精細度,但是 v2 精細度無法呼叫 v1。
  • 當叢集中有多個版本存在時,新的啟用將會隨機放在相容的定址接收器上。

您可以透過 GrainVersioningOptions 變更此預設行為:

var silo = new HostBuilder()
    .UseOrleans(c =>
    {
        c.Configure<GrainVersioningOptions>(options =>
        {
            options.DefaultCompatibilityStrategy = nameof(BackwardCompatible);
            options.DefaultVersionSelectorStrategy = nameof(MinimumVersion);
        });
    });