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 RetrieveConfirmedEvents
a . 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.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: