Günlük tutarlılığı sağlayıcıları
Paket, Microsoft.Orleans.EventSourcing
kullanmaya başlamaya uygun temel senaryoları kapsayan ve genişletilebilirlik sağlayan birkaç günlük tutarlılığı sağlayıcısı içerir.
Durum depolama
, Orleans.EventSourcing.StateStorage.LogConsistencyProvider bağımsız olarak yapılandırılabilir standart bir depolama sağlayıcısı kullanarak ayrıntılı durum anlık görüntülerini depolar.
Depolamada tutulan veriler, hem taneli durumu (için ilk tür parametresi JournaledGrain
tarafından belirtildiği gibi) hem de bazı meta verileri (sürüm numarası ve depolama erişimleri başarısız olduğunda olayların yinelenmemesi için kullanılan özel bir etiketi) içeren bir nesnedir.
Depolamaya her erişişimizde tüm tanecik durumu okunduğu/yazdığı için bu sağlayıcı, tanecik durumu çok büyük olan nesneler için uygun değildir.
Bu sağlayıcı desteklemez RetrieveConfirmedEvents, olaylar kalıcı olmadığından depolama alanından olayları alamıyor.
Günlük depolama
, Orleans.EventSourcing.LogStorage.LogConsistencyProvider bağımsız olarak yapılandırılabilir standart bir depolama sağlayıcısı kullanarak olay dizisinin tamamını tek bir nesne olarak depolar.
Depolamada tutulan veriler, bir ve bazı meta verileri içeren bir List<EventType> object
nesnedir (depolama erişimleri başarısız olduğunda olayların çoğaltılmasını önlemek için kullanılan özel bir etiket).
Bu sağlayıcı destekler RetrieveConfirmedEvents. Tüm olaylar her zaman kullanılabilir ve bellekte tutulur.
Depolamaya her erişişimizde olay dizisinin tamamı okunduğu/yazıldığı için, olay dizilerinin oldukça kısa kalacağı garanti edilmediği sürece bu sağlayıcı üretimde kullanıma uygun değildir. Bu sağlayıcının temel amacı, olay kaynağını belirlemenin semantiğini ve örnek/test ortamlarını göstermektir.
Özel depolama
Bu Orleans.EventSourcing.CustomStorage.LogConsistencyProvider , geliştiricinin uygun zamanlarda tutarlılık protokolü tarafından çağrılan depolama arabirimini takmasına olanak tanır. Bu sağlayıcı, depolananların durum anlık görüntüleri mi yoksa olaylar mı olduğu konusunda belirli varsayımlarda bulunmaz. Programcı bu seçim üzerinde denetim sahibi olduğunu varsayar (ve iki seçenekten birini veya ikisini birden depolar).
Bu sağlayıcıyı kullanmak için, bir tanecik daha önce olduğu gibi'den JournaledGrain<TGrainState,TEventBase>türetilmelidir, ancak ek olarak aşağıdaki arabirimi de uygulamalıdır:
public interface ICustomStorageInterface<StateType, EventType>
{
Task<KeyValuePair<int, StateType>> ReadStateFromStorage();
Task<bool> ApplyUpdatesToStorage(
IReadOnlyList<EventType> updates,
int expectedVersion);
}
Tutarlılık sağlayıcısı bunların belirli bir şekilde davranmasını bekler. Programcılar aşağıdakilerin farkında olmalıdır:
İlk yöntemin, ReadStateFromStoragehem sürümü hem de durum okumasını döndürmesi beklenir. Henüz depolanmış bir şey yoksa, sürümü için sıfır döndürmelidir ve eşleşen bir durum için
StateType
varsayılan oluşturucuya karşılık gelir.ApplyUpdatesToStorage beklenen sürüm gerçek sürümle eşleşmiyorsa false döndürmelidir (bu, e-etiket denetimine benzerdir).
Bir özel durumla başarısız olursa
ApplyUpdatesToStorage
tutarlılık sağlayıcısı yeniden denenir. Bu, böyle bir özel durum oluşursa ancak olay kalıcı hale getirildiğinde bazı olayların yinelenebileceği anlamına gelir. Geliştirici bunun güvenli olduğundan emin olmaktan sorumludur: örneğin, özel durum oluşturmayarak bu durumdan kaçının veya yinelenen olayların uygulama mantığı için zararsız olduğundan emin olun veya yinelenenleri filtrelemek için ek bir mekanizma ekleyin.
Bu sağlayıcı desteklemez RetrieveConfirmedEvents
. Tabii ki, geliştirici depolama arabirimini yine de denetlediğinden, bunu ilk etapta çağırmaları gerekmez, ancak olay alma işlemlerini uygulayabilir.