Partilhar via


Configuração de sourcing de eventos

Neste artigo, você aprenderá sobre várias opções de configuração de fornecimento de eventos para .NET Orleans.

Configurar referências de projeto

Interfaces de Grão

Como antes, as interfaces dependem apenas do Microsoft.Orleans.Core pacote, porque a interface grain é independente da implementação.

Implementações de grãos

JournaledGrains precisa derivar de JournaledGrain<TGrainState,TEventBase> ou JournaledGrain<TGrainState>, que é definido no Microsoft.Orleans.EventSourcing pacote.

Provedores de consistência de log

Atualmente, incluímos três provedores de consistência de log (para armazenamento de estado, armazenamento de log e armazenamento personalizado). Todos os três estão contidos no Microsoft.Orleans.EventSourcing pacote também. Portanto, todos os grãos registrados já têm acesso a eles. Para obter uma descrição do que esses provedores fazem e como eles diferem, consulte Provedores de consistência de log incluídos.

Configuração do cluster

Os provedores de consistência de log são configurados como qualquer outro Orleans provedor. Por exemplo, para incluir todos os três provedores (é claro, você provavelmente não precisará dos três), adicione isso ao <Globals> elemento do arquivo de configuração:

<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>

O mesmo pode ser conseguido programaticamente. Avançando para 2.0.0 estável, ClientConfiguration e ClusterConfiguration não existem mais! Ele agora foi substituído por a ClientBuilder e a SiloBuilder (observe que não há um construtor de clusters).

builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")

Atributos da classe de grãos

Cada classe de grão registrada no diário deve ter um LogConsistencyProviderAttribute para especificar o provedor de consistência logarítmica. Alguns fornecedores também exigem um StorageProviderAttribute, por exemplo:

[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
    JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
    //...
}

Portanto, aqui "OrleansLocalStorage" está sendo usado para armazenar o estado de grão, onde era "LogStorage" o provedor de armazenamento na memória para eventos de EventSourcing.

LogConsistencyProvider atributos

Para especificar o provedor de consistência de log, adicione um [LogConsistencyProvider(ProviderName=...)] atributo à classe grain e forneça o nome do provedor conforme configurado pela configuração do cluster, por exemplo:

[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
    JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
    // ...
}

StorageProvider atributos

Alguns provedores de consistência de log (incluindo LogStorage e StateStorage) usam um StorageProvider padrão para se comunicar com o armazenamento. Esse provedor é especificado usando um atributo separado StorageProvider , da seguinte maneira:

[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain :
    JournaledGrain<XDocument, IChatEvent>, IChatGrain
{
    // ...
}

Provedores padrão

É possível omitir os LogConsistencyProvider e/ou os StorageProvider atributos, se um padrão for especificado na configuração. Isso é feito usando o nome Default especial para o respetivo provedor. Por exemplo:

<LogConsistencyProviders>
    <Provider Name="Default"
        Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider"/>
</LogConsistencyProviders>
<StorageProviders>
    <Provider Name="Default"
        Type="Orleans.Storage.MemoryStorage" />
</StorageProviders>