Dela via


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>