Udostępnij za pośrednictwem


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

W tym artykule dowiesz się więcej o różnych opcjach konfiguracji określania źródła zdarzeń dla platformy .NET Orleans.

Konfigurowanie odwołań do projektu

Interfejsy ziarna

Tak jak wcześniej interfejsy zależą tylko Microsoft.Orleans.Core od pakietu, ponieważ interfejs ziarna jest niezależny od implementacji.

Implementacje ziarna

JournaledGrains muszą pochodzić z JournaledGrain<TGrainState,TEventBase> lub JournaledGrain<TGrainState>, który jest zdefiniowany w pakiecie Microsoft.Orleans.EventSourcing .

Dostawcy spójności dzienników

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

Konfiguracja klastra

Dostawcy spójności dzienników są konfigurowani tak samo jak wszyscy inni Orleans dostawcy. Aby na przykład uwzględnić wszystkich trzech dostawców (prawdopodobnie nie będziesz potrzebować wszystkich trzech), dodaj to 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>

To samo można osiągnąć programowo. Przejście do wersji 2.0.0 stabilnej, konfiguracja klienta i konfiguracja klastra już nie istnieją! Element został zastąpiony elementem ClientBuilder SiloBuilder i (zwróć uwagę, że nie ma konstruktora klastra).

builder.AddLogStorageBasedLogConsistencyProvider("LogStorage")

Atrybuty klasy ziarna

Każda klasa ziarna dziennika musi mieć wartość , 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
{
    //...
}

Dlatego w tym miejscu "OrleansLocalStorage" jest używany do przechowywania stanu ziarna, gdzie był "LogStorage" dostawcą magazynu w pamięci dla zdarzeń EventSourcing.

LogConsistencyProvider Atrybuty

Aby określić dostawcę [LogConsistencyProvider(ProviderName=...)] spójności dzienników, dodaj atrybut do klasy ziarna i nadaj 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ą standardowego dostawcy magazynu do komunikowania się z magazynem. Ten dostawca jest określany 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

Istnieje możliwość pominięcia atrybutów LogConsistencyProvider i/lub StorageProvider , jeśli w konfiguracji określono wartość domyślną. Odbywa się to przy użyciu specjalnej nazwy Default odpowiedniego dostawcy. Na przykład:

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