Udostępnij za pośrednictwem


Konfiguracja określania źródła zdarzeń

W tym artykule przedstawiono różne opcje konfiguracji określania źródła zdarzeń dla platformy .NET Orleans.

Konfigurowanie odwołań do projektu

Interfejsy ziarna

Jak poprzednio, interfejsy zależą tylko od pakietu Microsoft.Orleans.Core, ponieważ interfejs ziarna jest niezależny od implementacji.

Implementacje modułu Grain

Ziarna dziennika muszą pochodzić z JournaledGrain<TGrainState,TEventBase> lub JournaledGrain<TGrainState>, które są zdefiniowane w pakiecie Microsoft.Orleans.EventSourcing.

Dostawcy spójności logów

Obecnie mamy trzech dostawców spójności logów (dla magazynu stanów, magazynu logów i magazynu niestandardowego). Również wszystkie trzy są zawarte w pakiecie Microsoft.Orleans.EventSourcing. W związku z tym wszystkie zarejestrowane ziarna mają już do nich dostęp. Aby uzyskać opis tego, co robią ci dostawcy i jak się różnią, zobacz Uwzględnione dostawcy spójności dzienników.

Konfiguracja klastra

Skonfiguruj dostawców spójności dzienników tak samo jak pozostali Orleans dostawcy. Aby na przykład uwzględnić wszystkich trzech dostawców (choć prawdopodobnie nie będziesz potrzebować wszystkich trzech), dodaj go do <Globals> elementu pliku konfiguracji:

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

Można osiągnąć to samo programowo. Orleans Począwszy od stabilnej wersji 2.0.0 ClientConfiguration i ClusterConfiguration już nie istnieją. Zostały one zastąpione przez ClientBuilder i SiloBuilder (zwróć uwagę, że nie ma twórcy klastra).

builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")

Atrybuty klasy ziarna

Każda klasa z dziennikowaniem ziarna musi mieć LogConsistencyProviderAttribute, aby określić dostawcę spójności dzienników. Niektórzy dostawcy dodatkowo wymagają elementu StorageProviderAttribute, na przykład:

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

W tym przypadku "OrleansLocalStorage" jest używany do przechowywania stanu ziarna, natomiast "LogStorage" jest dostawcą przechowywania w pamięci dla zdarzeń EventSourcing.

LogConsistencyProvider atrybuty

Aby określić dostawcę spójności dzienników, dodaj atrybut [LogConsistencyProvider(ProviderName=...)] do klasy ziarna i podaj nazwę dostawcy zgodnie z konfiguracją klastra, na przykład:

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

StorageProvider atrybuty

Niektórzy dostawcy spójności dzienników (w tym LogStorage i StateStorage) używają standardu StorageProvider do komunikacji z pamięcią masową. Określ tego dostawcę przy użyciu oddzielnego StorageProvider atrybutu w następujący sposób:

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

Dostawcy domyślni

Można pominąć atrybuty LogConsistencyProvider i/lub StorageProvider, jeśli wartość domyślna jest określona w konfiguracji. W tym celu należy użyć specjalnej nazwy Default odpowiedniego dostawcy. Przykład:

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