Partager via


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>