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>