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>