Azure blob storage wycofanie zmian

0

Jak można rozwiązać potencjalny problem. Mam komendę do zapisu produktu i najpierw musze zapisać obrazek i potem przesłać event do event stora. I gdy obrazek się zapiszę a potem się wykrzyczy przy zapisie eventu, jaki mechanizm można zastosować do skasowania tego obrazka. Do event stora używam cosmos db, który rzuca CosmosExecption jest przechwytywany przez problem details i zwraca tam jakiś sobie response. Do obrazków jest azure blob storage. Potrzebuję wycofać zmiany jak się nie powiedzie zapis do event stora, albo powtórzyć jeszcze raz zapis, sam nie wiem.


public void SaveProductCommand(Product product)
{
//Tutaj się zapisze obrazek
_StorageService.Save(product.Image);

//Przesyłam zdażenia do event stora i tu leci exception
_EventStore.Commit(product.DomainEvents);
}
3

Polecam Polly https://github.com/App-vNext/Polly#retry nie będzie problemu z powtórzeniem zapisu, a jak przekroczysz daną ilość prób możesz wykonać jakąś dodatkową logikę

0

Możesz użyć też try catcha jeżeli nie chcesz korzystać z polly, i w catchu usunąć obrazek jeżeli istnieje.

0

Pytanie jak bardzo ci zależy na tym żeby na storage'u nie pozostały obrazki, które nie są z niczym powiązane.

Bo co w sytuacji, gdy nie udało się wysłać zdarzeń do event store'a, chcesz usunąć obrazek, ale teraz z jakiegoś powodu storage nie odpowiada? Robisz retry i dalej nie odpowiada. Co w takiej sytuacji?

0

@some_ONE: hmm, nie mam pomysłu, przegadam pewnie jeszcze z kimś z teamu, co zrobimy w takiej sytuacji, a ty masz jakieś rozwiązanie ?

2

Jeżeli obrazek musi zostać usunięty, to wszystkie te rozwiązania można o kant kuli potłuc. Jak w linijce 6 maszyna umrze, to choćbyś miał tam gazylion try catchy i innych bibliotek, to nic to nie da.

Poczytaj o Outbox http://www.kamilgrzybek.com/design/the-outbox-pattern/ lub
Zrób osobne zadanie, które będzie okresowo sprawdzało, czy dany obrazek jest do usunięcia (to może być nietrywialne)
Pokmiń, czy kasowanie obrazka w tym przypadku jest wymogiem, być może tak naprawdę wszystkie obrazki trzeba skasować i wystarczy ustawić retention policy
A może storage jest w stanie wysłać event? Microsoft ma jakiś EventBridge?

1 użytkowników online, w tym zalogowanych: 0, gości: 1