Поделиться через


Конфигурация источника событий

В этой статье вы узнаете о различных параметрах конфигурации источников событий для .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>