Megosztás a következőn keresztül:


Naplókonzisztencia-szolgáltatók

A Microsoft.Orleans.EventSourcing csomag számos olyan naplókonzisztencia-szolgáltatót tartalmaz, amelyek az első lépésekhez megfelelő alapvető forgatókönyveket fedik le, és lehetővé teszik a bővíthetőséget.

Állapottároló

A Orleans.EventSourcing.StateStorage.LogConsistencyProvider szemcsés állapot pillanatképeit egy független konfigurálható standard tárolószolgáltató használatával tárolja.

A tárolóban tárolt adatok olyan objektumok, amelyek tartalmazzák a szemcsés állapotot (az első típusparaméter JournaledGraináltal megadottak szerint) és néhány metaadatot (a verziószámot, valamint egy speciális címkét, amely az események duplikálásának elkerülésére szolgál, ha a tárelérések sikertelenek).

Mivel a teljes gabonaállapot minden alkalommal olvasható/írható, amikor hozzáférünk a tárolóhoz, ez a szolgáltató nem alkalmas olyan objektumokra, amelyek szemcsés állapota nagyon nagy.

Ez a szolgáltató nem támogatja RetrieveConfirmedEvents, nem tudja lekérni az eseményeket a tárolóból, mert az események nem maradnak meg.

Naplótárolás

A Orleans.EventSourcing.LogStorage.LogConsistencyProvider teljes eseményütemezést egyetlen objektumként tárolja, egy önállóan konfigurálható standard tárolószolgáltató használatával.

A tárolóban tárolt adatok egy olyan objektum, amely tartalmaz egy List<EventType> object, és néhány metaadatot (egy speciális címkét, amely az események duplikálásának elkerülésére szolgál, ha a tárhozzáférések sikertelenek).

Ez a szolgáltató támogatja RetrieveConfirmedEventsa . Minden esemény mindig elérhető és a memóriában marad.

Mivel a teljes eseménysorozat minden alkalommal olvasható/írható, amikor hozzáférünk a tárolóhoz, ez a szolgáltató nem alkalmas éles környezetben való használatra, kivéve, ha az eseménysorozatok garantáltan elég rövidek maradnak. Ennek a szolgáltatónak a fő célja, hogy bemutassa az esemény forrásának szemantikáját, valamint a mintákat/tesztelési környezeteket.

Egyéni tároló

Így Orleans.EventSourcing.CustomStorage.LogConsistencyProvider a fejlesztő csatlakoztathatja a tárolófelületet, amelyet a konzisztenciaprotokoll a megfelelő időpontokban hív meg. Ez a szolgáltató nem tesz konkrét feltételezéseket arról, hogy a tárolt állapot pillanatképek vagy események - a programozó feltételezi a választás feletti irányítást (és tárolhatja vagy mindkettőt).

A szolgáltató használatához a szemcsének a korábbiakhoz hasonlóan kell származnia JournaledGrain<TGrainState,TEventBase>, de emellett a következő felületet is implementálnia kell:

public interface ICustomStorageInterface<StateType, EventType>
{
    Task<KeyValuePair<int, StateType>> ReadStateFromStorage();

    Task<bool> ApplyUpdatesToStorage(
        IReadOnlyList<EventType> updates,
        int expectedVersion);
}

A konzisztenciaszolgáltató elvárja, hogy ezek bizonyos módon viselkedjenek. A programozóknak tisztában kell lenniük azzal, hogy:

  • Az első metódus várhatóan ReadStateFromStoragea verziót és az olvasási állapotot is visszaadja. Ha még nincs tárolva semmi, akkor nullát kell visszaadnia a verziónak, és egy olyan állapotnak kell lennie, amely megfelel a következő alapértelmezett konstruktornak StateType: .

  • ApplyUpdatesToStorage hamis értéket kell visszaadnia, ha a várt verzió nem felel meg a tényleges verziónak (ez hasonló az e-címke ellenőrzéséhez).

  • Ha ApplyUpdatesToStorage kivétellel meghiúsul, a konzisztenciaszolgáltató újrapróbálkozza. Ez azt jelenti, hogy egyes események duplikálhatók, ha egy ilyen kivételt jeleznek, de az esemény megmarad. A fejlesztő felelős azért, hogy ez biztonságos legyen: például kerülje ezt az esetet úgy, hogy nem ad kivételt, vagy gondoskodik arról, hogy a duplikált események ártalmatlanok legyenek az alkalmazás logikája számára, vagy adjon hozzá néhány további mechanizmust az ismétlődések szűréséhez.

Ez a szolgáltató nem támogatja RetrieveConfirmedEventsa . Természetesen, mivel a fejlesztő egyébként is vezérli a tárolófelületet, először nem kell ezt meghívniuk, hanem implementálniuk kell az eseménylekérést.