事件溯源配置

在本文中,你将了解 .NET Orleans的各种事件溯源配置选项。

配置项目引用

晶粒界面

与以前一样,接口只依赖于 Microsoft.Orleans.Core 包,因为粒度接口独立于实现。

粒度实现

有日志记录的粒度需要派生自JournaledGrain<TGrainState,TEventBase>JournaledGrain<TGrainState>,这些是在Microsoft.Orleans.EventSourcing包中定义的。

日志一致性提供商

我们目前包括三个日志一致性提供程序(用于状态存储、日志存储和自定义存储)。 这三项也包含在Microsoft.Orleans.EventSourcing包中。 因此,所有记录过的谷物已能访问它们。 有关这些提供程序执行的操作及它们的差异的描述,请参阅 包含的日志一致性提供程序

群集配置

像配置其他Orleans 提供者一样配置日志一致性提供者。 例如,若要包含所有三个提供程序(尽管可能不需要这三个提供程序),请将它添加到 <Globals> 配置文件的元素:

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

可以通过编程方式实现相同的目标。 从 Orleans 2.0.0 稳定开始, ClientConfigurationClusterConfiguration 不再存在。 它们已被替换( ClientBuilderSiloBuilder 请注意没有群集生成器)。

builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")

谷物类别属性

每个日志粒度类必须有一个 LogConsistencyProviderAttribute 指定日志一致性提供程序。 某些服务提供商还需要一个 StorageProviderAttribute,例如:

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

因此, "OrleansLocalStorage" 此处用于存储粒度状态,而 "LogStorage" 内存中存储提供程序用于 EventSourcing 事件。

LogConsistencyProvider 属性

若要指定日志一致性提供程序,请将属性 [LogConsistencyProvider(ProviderName=...)] 添加到粒度类,并提供在群集配置中配置的提供程序的名称,例如:

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

StorageProvider 属性

某些日志一致性提供程序(包括 LogStorageStateStorage)使用标准 StorageProvider 来与存储通信。 使用单独的 StorageProvider 属性指定此提供程序,如下所示:

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

默认提供程序

如果在配置中指定了默认值,则可以省略 LogConsistencyProvider 和/或 StorageProvider 属性。 为此,请使用相应提供程序的特殊名称 Default 。 例如:

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