Configuration de l’approvisionnement en événements
Dans cet article, vous allez découvrir différentes options de configuration de l’approvisionnement en événements pour .NET Orleans.
Configurer les références de projet
Interfaces de grain
Comme indiqué auparavant, les interfaces dépendent uniquement du package Microsoft.Orleans.Core
, car l’interface de grain est indépendante de l’implémentation.
Implémentations de grains
JournaledGrains doit dériver de JournaledGrain<TGrainState,TEventBase> ou JournaledGrain<TGrainState>, qui est défini dans le package Microsoft.Orleans.EventSourcing
.
Fournisseurs de cohérence des journaux
Nous incluons trois fournisseurs de cohérence des journaux (pour le stockage d’état, le stockage des journaux et le stockage personnalisé). Tous les trois sont également contenus dans le package Microsoft.Orleans.EventSourcing
. Ainsi, tous les grains journalisés y ont déjà accès. Pour savoir ce que font ces fournisseurs, et en quoi ils se distinguent, consultez Fournisseurs de cohérence des journaux inclus.
Configuration de clusters
Les fournisseurs de cohérence des journaux sont configurés comme tous les autres fournisseurs Orleans. Par exemple, pour inclure les trois fournisseurs (vous n’avez bien entendu pas besoin des trois), ajoutez ceci à l’élément <Globals>
du fichier config :
<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>
Vous pouvez effectuer la même chose par programmation. Si vous passez à la version 2.0.0 stable, ClientConfiguration et ClusterConfiguration n’existent plus ! Ils ont été remplacés par ClientBuilder et SiloBuilder
(notez qu’il n’existe aucun générateur de cluster).
builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")
Attributs de classe de grain
Chaque classe de grain journalisée doit avoir un LogConsistencyProviderAttribute pour spécifier le fournisseur de cohérence des journaux. Certains fournisseurs nécessitent en plus un StorageProviderAttribute, par exemple :
[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
//...
}
Ainsi, "OrleansLocalStorage"
est utilisé ici pour stocker l’état du grain, où "LogStorage"
correspond au fournisseur de stockage en mémoire pour les événements EventSourcing.
Attributs LogConsistencyProvider
Pour spécifier le fournisseur de cohérence des journaux, ajoutez un attribut [LogConsistencyProvider(ProviderName=...)]
à la classe de grain, puis indiquez le nom du fournisseur tel qu’il est configuré par la configuration du cluster, par exemple :
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
// ...
}
Attributs StorageProvider
Certains fournisseurs de cohérence des journaux (notamment LogStorage
et StateStorage
) utilisent un StorageProvider standard pour communiquer avec le stockage. Ce fournisseur est spécifié à l’aide d’un attribut StorageProvider
distinct, comme ceci :
[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain
{
// ...
}
Fournisseurs par défaut
Il est possible d’omettre les attributs LogConsistencyProvider
et/ou StorageProvider
, si une valeur par défaut est spécifiée dans la configuration. Dans ce cas, utilisez le nom spécial Default
pour le fournisseur correspondant. Par exemple :
<LogConsistencyProviders>
<Provider Name="Default"
Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider"/>
</LogConsistencyProviders>
<StorageProviders>
<Provider Name="Default"
Type="Orleans.Storage.MemoryStorage" />
</StorageProviders>