Compartir a través de


Configuración de origen de eventos

En este artículo, obtendrá información sobre varias opciones de configuración de aprovisionamiento de eventos para .NET Orleans.

Configurar referencias de proyecto

Interfaces de grano

Como antes, las interfaces dependen solo del Microsoft.Orleans.Core paquete porque la interfaz de grano es independiente de la implementación.

Implementaciones granulares

Los granos registrados deben 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 están incluidos también en el paquete Microsoft.Orleans.EventSourcing. Por lo tanto, todos los granos registrados ya tienen acceso a ellos. Para obtener una descripción de lo que hacen estos proveedores y cómo difieren, consulte Proveedores de coherencia de registros incluidos.

Configuración del clúster

Configure proveedores de coherencia de registros como cualquier otro Orleans proveedor. Por ejemplo, para incluir los tres proveedores (aunque probablemente no necesitará los tres), agréguelo al <Globals> elemento 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>

Puede lograr lo mismo mediante programación. A partir de la versión 2.0.0 estable, Orleans y ClientConfiguration ya no existen. Se han reemplazado por ClientBuilder y SiloBuilder (tenga en cuenta que no hay ningún generador de clústeres).

builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")

Atributos de la clase Grain

Cada clase de grano registrada debe tener un LogConsistencyProviderAttribute para especificar el proveedor de consistencia 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 granos, mientras que "LogStorage" es el proveedor de almacenamiento en memoria para eventos de EventSourcing.

atributos de LogConsistencyProvider

Para especificar el proveedor de coherencia de registros, agregue un [LogConsistencyProvider(ProviderName=...)] atributo a la clase de grano y proporcione el nombre del proveedor como configurado en la configuración del clúster, por ejemplo:

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

atributos de StorageProvider

Algunos proveedores de coherencia de registros (incluidos LogStorage y StateStorage) usan un estándar StorageProvider para comunicarse con el almacenamiento. Especifique este proveedor mediante un atributo independiente StorageProvider , como se indica a continuación:

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

Proveedores predeterminados

Puede omitir los atributos LogConsistencyProvider y/o StorageProvider si se especifica un valor predeterminado en la configuración. Para ello, use el nombre Default especial para el proveedor correspondiente. Por ejemplo:

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