Конфигурация источника событий
В этой статье вы узнаете о различных параметрах конфигурации источников событий для .NET Orleans.
Настройка ссылок на проекты
Интерфейсы зерна
Как и раньше, интерфейсы зависят только Microsoft.Orleans.Core
от пакета, так как интерфейс зерна не зависит от реализации.
Реализации зерновых элементов
ЖурналedGrains должен быть производным от 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>
То же самое можно достичь программным способом. Переход к стабильной версии 2.0.0, ClientConfiguration и ClusterConfiguration больше не существует! Теперь он был заменен и ClientBuilder ( SiloBuilder
обратите внимание, что построитель кластеров отсутствует).
builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")
Атрибуты класса Grain
Каждый класс зерна в журнале должен иметь значение LogConsistencyProviderAttribute для указания поставщика согласованности журналов. Для некоторых поставщиков также требуется StorageProviderAttribute, например:
[StorageProvider(ProviderName = "OrleansLocalStorage")]
[LogConsistencyProvider(ProviderName = "LogStorage")]
public class EventSourcedBankAccountGrain :
JournaledGrain<BankAccountState>, IEventSourcedBankAccountGrain
{
//...
}
Поэтому здесь "OrleansLocalStorage"
используется для хранения состояния зерна, где был "LogStorage"
поставщик хранилища в памяти для событий EventSourcing.
LogConsistencyProvider
Атрибуты
Чтобы указать поставщик согласованности журналов, добавьте атрибут в класс grain и укажите [LogConsistencyProvider(ProviderName=...)]
имя поставщика, настроенного конфигурацией кластера, например:
[LogConsistencyProvider(ProviderName = "CustomStorage")]
public class ChatGrain :
JournaledGrain<XDocument, IChatEvent>, IChatGrain, ICustomStorage
{
// ...
}
StorageProvider
Атрибуты
Некоторые поставщики согласованности журналов (включая LogStorage
иStateStorage
) используют стандартную служба хранилища Provider для взаимодействия с хранилищем. Этот поставщик указан с помощью отдельного 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>