Konfiguration av händelsekällor
I den här artikeln får du lära dig mer om olika konfigurationsalternativ för händelsekällor för .NET Orleans.
Konfigurera projektreferenser
Gränssnitt för korn
Precis som tidigare beror gränssnitten bara på Microsoft.Orleans.Core
paketet, eftersom korngränssnittet är oberoende av implementeringen.
Korniga implementeringar
JournaledGrains måste härledas från JournaledGrain<TGrainState,TEventBase> eller JournaledGrain<TGrainState>, som definieras i Microsoft.Orleans.EventSourcing
paketet.
Loggkonsekvensproviders
Vi inkluderar för närvarande tre log-konsekvensproviders (för tillståndslagring, logglagring och anpassad lagring). Alla tre finns också i Microsoft.Orleans.EventSourcing
paketet. Därför har alla Journaled Grains redan åtkomst till dem. En beskrivning av vad dessa leverantörer gör och hur de skiljer sig åt finns i Inkluderade log-konsekvensproviders.
Klusterkonfiguration
Logkonsekvensprovidrar konfigureras precis som andra Orleans leverantörer. Om du till exempel vill inkludera alla tre providrar (naturligtvis behöver du förmodligen inte alla tre) lägger du till detta i -elementet <Globals>
i konfigurationsfilen:
<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>
Samma sak kan uppnås programmatiskt. Framöver till 2.0.0 stabilt finns inte längre ClientConfiguration och ClusterConfiguration! Den har nu ersatts av en ClientBuilder och en SiloBuilder
(observera att det inte finns någon klusterbyggare).
builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")
Kornklassattribut
Varje journalförd kornklass måste ha en LogConsistencyProviderAttribute för att ange loggkonsekvensprovidern. Vissa leverantörer kräver dessutom en StorageProviderAttribute, till exempel:
[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
//...
}
Så här "OrleansLocalStorage"
används för att lagra korntillståndet, där var "LogStorage"
är den minnesinterna lagringsprovidern för EventSourcing-händelser.
LogConsistencyProvider
Attribut
Om du vill ange loggkonsekvensprovidern lägger du till ett [LogConsistencyProvider(ProviderName=...)]
attribut i kornklassen och anger namnet på providern som konfigurerats av klusterkonfigurationen, till exempel:
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
// ...
}
StorageProvider
Attribut
Vissa logkonsekvensprovidrar (inklusive LogStorage
och StateStorage
) använder en standardlagringsprovider för att kommunicera med lagring. Den här providern anges med ett separat StorageProvider
attribut enligt följande:
[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain
{
// ...
}
Standardprovidrar
Det går att utelämna attributen LogConsistencyProvider
StorageProvider
och/eller om ett standardvärde anges i konfigurationen. Detta görs med hjälp av specialnamnet Default
för respektive provider. Till exempel:
<LogConsistencyProviders>
<Provider Name="Default"
Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider"/>
</LogConsistencyProviders>
<StorageProviders>
<Provider Name="Default"
Type="Orleans.Storage.MemoryStorage" />
</StorageProviders>