Share via


事件來源設定

在本文中,您將了解 .NET Orleans 的各種事件來源設定。

設定專案參考

粒紋介面

與先前相同,介面只與 Microsoft.Orleans.Core 套件有關,因為粒紋介面與實作無關。

粒紋實作

JournaledGrains 必須衍生自 JournaledGrain<TGrainState,TEventBase>JournaledGrain<TGrainState>,其定義位於 Microsoft.Orleans.EventSourcing 套件中。

記錄一致性提供者

我們目前包含三個記錄一致性提供者 (適用於狀態儲存體、記錄儲存體和自訂儲存體)。 這三者也都包含在 Microsoft.Orleans.EventSourcing 套件中。 因此,所有日誌粒紋都已有這些存取權。 如需這些提供者的用途及其不同之處的描述,請參閱隨附的記錄一致性提供者

叢集組態

記錄一致性提供者的設定方式就像任何其他 Orleans 提供者一樣。 例如,若要包含所有三個提供者 (當然,您可能不會同時需要三者),請將其新增至設定檔 <Globals> 的元素:

<LogConsistencyProviders>
    <Provider Name="StateStorage"
        Type="Orleans.EventSourcing.StateStorage.LogConsistencyProvider" />
    <Provider Name="LogStorage"
        Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider" />
    <Provider Name="CustomStorage"
        Type="Orleans.EventSourcing.CustomStorage.LogConsistencyProvider" />
</LogConsistencyProviders>

這可以透過程式設計方式達成。 繼續進行 2.0.0 穩定版本,ClientConfiguration 和 ClusterConfiguration 已不存在! 其現在已由 ClientBuilderSiloBuilder (請注意沒有叢集建立器) 取代。

builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")

粒紋類別屬性

每個日誌粒紋類別都必須有 LogConsistencyProviderAttribute 才能指定記錄一致性提供者。 某些提供者還需要 StorageProviderAttribute,例如:

[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
    JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
    //...
}

因此,"OrleansLocalStorage" 在此處是用於儲存粒紋狀態,其中 "LogStorage" 是 EventSourcing 事件的記憶體內部儲存提供者。

LogConsistencyProvider 屬性

若要指定記錄一致性提供者,請將 [LogConsistencyProvider(ProviderName=...)] 屬性新增至粒紋類別,並提供叢集設定所設定的提供者名稱,例如:

[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
    JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
    // ...
}

StorageProvider 屬性

某些記錄一致性提供者 (包括 LogStorageStateStorage) 使用標準 StorageProvider 與儲存體通訊。 此提供者是使用個別 StorageProvider 屬性來指定,如下所示:

[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain :
    JournaledGrain<XDocument, IChatEvent>, IChatGrain
{
    // ...
}

預設提供者

如果設定中指定了預設值,可以省略 LogConsistencyProvider 和/或 StorageProvider 屬性。 這是使用個別提供者的特殊名稱 Default 來完成。 例如:

<LogConsistencyProviders>
    <Provider Name="Default"
        Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider"/>
</LogConsistencyProviders>
<StorageProviders>
    <Provider Name="Default"
        Type="Orleans.Storage.MemoryStorage" />
</StorageProviders>