事件來源設定
在本文中,您將了解 .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 已不存在! 其現在已由 ClientBuilder 與 SiloBuilder
(請注意沒有叢集建立器) 取代。
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
屬性
某些記錄一致性提供者 (包括 LogStorage
和 StateStorage
) 使用標準 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>