Konfiguration des Ereignissourcings
Dieser Artikel enthält Informationen zu verschiedenen Ereignissourcing-Konfigurationsoptionen für .NET Orleans.
Konfigurieren von Projektverweisen
Grainschnittstellen
Schnittstellen hängen nach wie vor nur vom Microsoft.Orleans.Core
-Paket ab, da die Grainschnittstelle unabhängig von der Implementierung ist.
Grainimplementierungen
Journalisierte Grains (JournaledGrains) müssen von JournaledGrain<TGrainState,TEventBase> oder JournaledGrain<TGrainState> abgeleitet werden (im Microsoft.Orleans.EventSourcing
-Paket definiert).
Protokollkonsistenzanbieter
Aktuell stehen drei Protokollkonsistenzanbieter (für Zustandsspeicher, Protokollspeicher und benutzerdefinierten Speicher) zur Verfügung. Alle drei sind ebenfalls im Microsoft.Orleans.EventSourcing
-Paket enthalten. Daher haben alle journalisierten Grains bereits Zugriff auf sie. Die Aufgaben dieser Anbieter sowie die Unterschiede zwischen ihnen werden unter Protokollkonsistenzanbieter beschrieben.
Clusterkonfiguration
Protokollkonsistenzanbieter werden wie alle anderen Orleans-Anbieter konfiguriert. Wenn Sie beispielsweise alle drei Anbieter einschließen möchten (was bei Ihnen wahrscheinlich gar nicht nötig ist), können Sie dem <Globals>
-Element der Konfigurationsdatei Folgendes hinzufügen:
<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>
Das gleiche Ergebnis kann auch programmgesteuert erreicht werden. Ab 2.0.0 stable sind ClientConfiguration und ClusterConfiguration nicht mehr vorhanden. Sie wurden durch ClientBuilder und SiloBuilder
ersetzt. (Beachten Sie, dass kein Cluster-Generator vorhanden ist.)
builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")
Grainklassenattribute
Jede journalisierte Grain-Klasse muss über ein LogConsistencyProviderAttribute-Element verfügen, um den Protokollkonsistenzanbieter anzugeben. Einige Anbieter erfordern zusätzlich ein StorageProviderAttribute-Element. Beispiel:
[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
//...
}
Hier wird "OrleansLocalStorage"
zum Speichern des Grainzustands verwendet. "LogStorage"
ist in diesem Fall der In-Memory-Speicheranbieter für EventSourcing-Ereignisse.
LogConsistencyProvider
-Attribute
Um den Protokollkonsistenzanbieter anzugeben, fügen Sie der Grain-Klasse ein [LogConsistencyProvider(ProviderName=...)]
-Attribut hinzu, und geben Sie den Namen des Anbieters an, der in der Clusterkonfiguration konfiguriert wurde. Beispiel:
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
// ...
}
StorageProvider
-Attribute
Einige Protokollkonsistenzanbieter (einschließlich LogStorage
und StateStorage
) verwenden einen Standardspeicheranbieter (StorageProvider) für die Kommunikation mit dem Speicher. Dieser Anbieter wird wie folgt mit einem separaten StorageProvider
-Attribut angegeben:
[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain
{
// ...
}
Standardanbieter
Es ist möglich, das LogConsistencyProvider
-Attribut und/oder das StorageProvider
-Attribut wegzulassen, wenn in der Konfiguration ein Standardwert angegeben ist. Dazu wird der spezielle Name Default
für den jeweiligen Anbieter verwendet. Beispiel:
<LogConsistencyProviders>
<Provider Name="Default"
Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider"/>
</LogConsistencyProviders>
<StorageProviders>
<Provider Name="Default"
Type="Orleans.Storage.MemoryStorage" />
</StorageProviders>