Compartilhar via


Configuração do fornecimento de eventos

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

Configurar referências de projeto

Interfaces de granularidade

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

Implementações de granularidade

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

Provedores de consistência de log

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

Configuração do cluster

Provedores de consistência de log são configurados da mesma forma que qualquer outro provedor do Orleans. Por exemplo, para incluir os três provedores (é claro, você provavelmente não precisará dos três), adicione o seguinte ao elemento <Globals> 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 alcançado programaticamente. Avançar para o 2.0.0 estável, ClientConfiguration e ClusterConfiguration não existe mais! Agora ele foi substituído por um ClientBuilder e um SiloBuilder (observe que não há nenhum construtor de cluster).

builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")

Atributos da classe de granularidade

Cada classe de granularidade registrada deve ter um LogConsistencyProviderAttribute para especificar o provedor de consistência de log. Alguns provedores também exigem um StorageProviderAttribute, por exemplo:

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

Portanto, "OrleansLocalStorage" aqui está sendo utilizado para armazenar o estado de granularidade, e onde estava "LogStorage" é o provedor de armazenamento na memória para eventos EventSourcing.

Atributos LogConsistencyProvider

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

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

Atributos StorageProvider

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 StorageProvider separado, da seguinte maneira:

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

Provedores padrão

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

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