Configuración del origen de eventos
En este artículo, conocerá varias opciones de configuración de orígenes de eventos para .NET Orleans.
Configuración de referencias de proyecto
Interfaces de grano
Como antes, las interfaces dependen solo del paquete Microsoft.Orleans.Core
, ya que la interfaz de grano es independiente de la implementación.
Implementaciones de grano
JournaledGrains debe derivar de JournaledGrain<TGrainState,TEventBase> o JournaledGrain<TGrainState>, que se define en el paquete Microsoft.Orleans.EventSourcing
.
Proveedores de coherencia de registros
Actualmente se incluyen tres proveedores de coherencia de registros (para el almacenamiento de estado, el almacenamiento de registros y el almacenamiento personalizado). Los tres también están incluidos en el paquete Microsoft.Orleans.EventSourcing
. Por lo tanto, todos los granos en diario ya tienen acceso a ellos. Para obtener una descripción de lo que hacen estos proveedores y cómo difieren, consulte Proveedores de Log-Consistency incluidos.
Configuración del clúster
Los proveedores de coherencia de registros están configurados igual que cualquier otro proveedor de Orleans. Por ejemplo, para incluir los tres proveedores (por supuesto, probablemente no necesitará los tres), agréguelo al elemento <Globals>
del archivo de configuración:
<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>
Lo mismo se puede lograr mediante programación. Al pasar a la versión estable 2.0.0, ClientConfiguration y ClusterConfiguration ya no existen. Ahora se ha reemplazado por ClientBuilder y un SiloBuilder
(observe que no hay ningún generador de clústeres).
builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")
Atributos de clase de grano
Cada clase de grano en diario debe tener un LogConsistencyProviderAttribute para especificar el proveedor de coherencia del registro. Algunos proveedores requieren además un StorageProviderAttribute, por ejemplo:
[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
//...
}
Por lo tanto, aquí "OrleansLocalStorage"
se usa para almacenar el estado de grano, donde era "LogStorage"
el proveedor de almacenamiento en memoria para eventos EventSourcing.
Atributos LogConsistencyProvider
Para especificar el proveedor de coherencia de registros, agregue un atributo [LogConsistencyProvider(ProviderName=...)]
a la clase de grano y asigne el nombre del proveedor según lo configurado por la configuración del clúster, por ejemplo:
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
// ...
}
Atributos StorageProvider
Algunos proveedores de coherencia de registros (incluidos LogStorage
y StateStorage
) usan un storageProvider estándar para comunicarse con el almacenamiento. Este proveedor se especifica mediante un atributo StorageProvider
independiente, como se indica a continuación:
[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain
{
// ...
}
Proveedores predeterminados
Es posible omitir los atributos LogConsistencyProvider
y/o StorageProvider
, si se especifica un valor predeterminado en la configuración. Para ello, se usa el nombre especial Default
del proveedor correspondiente. Por ejemplo:
<LogConsistencyProviders>
<Provider Name="Default"
Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider"/>
</LogConsistencyProviders>
<StorageProviders>
<Provider Name="Default"
Type="Orleans.Storage.MemoryStorage" />
</StorageProviders>