Configurazione dell'origine eventi
In questo articolo verranno fornite informazioni sulle varie opzioni di configurazione dell'origine eventi per .NET Orleans.
Configurare i riferimenti al progetto
Interfacce dei grani
Come in precedenza, le interfacce dipendono solo dal pacchetto Microsoft.Orleans.Core
, perché l'interfaccia granulare è indipendente dall'implementazione.
Implementazioni granulari
JournaledGrains deve derivare da JournaledGrain<TGrainState,TEventBase> o JournaledGrain<TGrainState>, definito nel pacchetto Microsoft.Orleans.EventSourcing
.
Provider di coerenza dei log
Attualmente sono inclusi tre provider di coerenza dei log (per l'archiviazione dello stato, l'archiviazione dei log e l'archiviazione personalizzata). Tutti e tre sono contenuti anche nel pacchetto Microsoft.Orleans.EventSourcing
. Pertanto, tutti i grani journaled hanno già accesso a quelli. Per una descrizione delle operazioni eseguite da questi provider e delle differenze, vedere Provider di coerenza dei log inclusi.
Configurazione del cluster
I provider di coerenza dei log vengono configurati esattamente come qualsiasi altro provider di Orleans. Ad esempio, per includere tutti e tre i provider (naturalmente, probabilmente non saranno necessari tutti e tre), aggiungerlo all'elemento <Globals>
del file di configurazione:
<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>
Lo stesso risultato può essere ottenuto a livello di codice. Passare alla versione 2.0.0 stabile, ClientConfiguration e ClusterConfiguration non esistono più! Ora è stata sostituita da un oggetto ClientBuilder e un oggetto SiloBuilder
(si noti che non è presente alcun generatore di cluster).
builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")
Attributi della classe Grani
Per specificare il provider di coerenza dei log, ogni classe di granularità journaled deve avere un LogConsistencyProviderAttribute per specificare il provider di coerenza dei log. Alcuni provider richiedono anche un oggetto StorageProviderAttribute, ad esempio:
[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
//...
}
In questo caso "OrleansLocalStorage"
viene usato per archiviare lo stato di granularità, dove "LogStorage"
è il provider di archiviazione in memoria per gli eventi EventSourcing.
Attributi LogConsistencyProvider
Per specificare il provider di coerenza dei log, aggiungere un attributo [LogConsistencyProvider(ProviderName=...)]
alla classe granulare e assegnare il nome del provider come configurato dalla configurazione del cluster, ad esempio:
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
// ...
}
Attributi StorageProvider
Alcuni provider di coerenza dei log (inclusi LogStorage
e StateStorage
) usano uno StorageProvider standard per comunicare con l'archiviazione. Questo provider viene specificato usando un attributo StorageProvider
separato, come indicato di seguito:
[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain
{
// ...
}
Provider predefiniti
È possibile omettere LogConsistencyProvider
e/o gli attributi StorageProvider
se nella configurazione è specificato un valore predefinito. A tale scopo, usare il nome speciale Default
per il rispettivo provider. Ad esempio:
<LogConsistencyProviders>
<Provider Name="Default"
Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider"/>
</LogConsistencyProviders>
<StorageProviders>
<Provider Name="Default"
Type="Orleans.Storage.MemoryStorage" />
</StorageProviders>