配置
配置项目引用
grain的接口
和之前一样,接口仅依赖于Microsoft.Orleans.Core
包,因为grain接口独立于实现。
grain的实现
JournaledGrains需要继承自JournaledGrain<S,E>
或JournaledGrain<S>
,它们在Microsoft.Orleans.EventSourcing
包中定义。
日志一致性提供者
我们目前包括三个日志一致性提供程序(用于状态存储,日志存储和自定义存储)。这三个都包含在Microsoft.Orleans.EventSourcing
包中。因此,所有的Journaled Grains都可以访问这三个提供程序。有关这些提供程序的功能及其区别的说明,请参阅包含的日志一致性提供程序。
群集配置
日志一致性提供程序的配置与任何其他Orleans提供程序一样。例如,要包含全部的三个提供程序(当然,您可能不需要全部三个),请将其添加到配置文件的<Globals>
元素中:
<LogConsistencyProviders>
<Provider Type="Orleans.EventSourcing.StateStorage.LogConsistencyProvider" Name="StateStorage" />
<Provider Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider" Name="LogStorage" />
<Provider Type="Orleans.EventSourcing.CustomStorage.LogConsistencyProvider" Name="CustomStorage" />
</LogConsistencyProviders>
可以通过编程方式实现同样的目的。假设项目包含Microsoft.Orleans.EventSourcing
包,并且config
是一个ClusterConfiguration
对象:
using Orleans.Runtime.Configuration; // pick up the necessary extension methods
config.AddLogStorageBasedLogConsistencyProvider("LogStorage");
config.AddStateStorageBasedLogConsistencyProvider("StateStorage");
config.AddCustomStorageBasedLogConsistencyProvider("CustomStorage");
grain类的属性
每个journaled grain 类必须具有一个LogConsistencyProvider
属性,来指定日志一致性提供者。某些提供程序还要求一个StorageProvider
属性。
LogConsistencyProvider属性
要指定日志一致性提供程序,请向grain类添加一个[LogConsistencyProvider(ProviderName=...)]
属性,并根据Cluster的配置,给出提供程序的名称。例如:
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain : JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage { ... }
StorageProvider属性
一些日志一致性提供程序(包括LogStorage
和StateStorage
)使用标准StorageProvider与存储进行通信。使用单独的StorageProvider
属性,来指定此提供程序,如下所示:
[LogConsistencyProvider(ProviderName = "LogStorage")]
[StorageProvider(ProviderName = "AzureBlobStorage")]
public class ChatGrain : JournaledGrain<XDocument, IChatEvent>, IChatGrain { ... }
默认的提供程序
如果在配置中指定了默认值,则可以省略LogConsistencyProvider
和/或StorageProvider
属性。这是通过使用各自的提供程序的特殊名称Default
来完成的。例如:
<LogConsistencyProviders>
<Provider Type="Orleans.EventSourcing.LogStorage.LogConsistencyProvider" Name="Default" />
</LogConsistencyProviders>
<StorageProviders>
<Provider Type="Orleans.Storage.MemoryStorage" Name="Default" />
</StorageProviders>