Resilienz

Im Folgenden wird beschrieben, wie die allgemeinen Konzepte der Resilienz in den Ländern angebunden und umgesetzt werden. Die Anwendung der Patterns Circuit-Breaker, Retry und viele mehr werden hier nicht mehr thematisiert, sondern nur dort angeführt, wo aus Entwicklersicht relevant.

Idempotenz-Library

Die Implementierung eines idempotenten Service geschieht durch Nutzung einer Schleupen.CS-Idempotenz-Library plus der Verwendung einer im eigenen Schema zu definierenden Tabelle, die diese Bibliothek benötigt.

Der Anschluss der Bibliothek erfolgt über einen Castle-Installer. Über einen Castle-Interceptor wird dann die Implementierung der Idempotenz allgemein durch die Bibliothek umgesetzt.

Happy-Path der Umsetzung von Idempotenz mithilfe der Schleupen.CS-Bibliothek

Durch Attributierung einer Operation mithilfe des Attributs Idempotent wird festgelegt, den Idempotenz-Mechanismus zu aktivieren. Die Auswertung hierzu erfolgt über den Interceptor.

public class BuecherAusleihenActivityService : IBuecherAusleihenActivityService
{
  ...
  [CSOperationBehavior(TransactionScopeRequired = true)]
  [IdempotentOperationBehavior]
  public virtual async Task<AusleihenResponse> AusleihenAsync(AusleihenRequest request)
  {
    ...
  }
}

Wichtig ist, dass nicht jede Operation diesen Idempotenz-Mechanismus benötigt, da einige Operationen per se idempotent sind. So ist beispielsweise das Löschen trivial idempotent implementierbar. Abfragen sind beispielsweise ebenfalls per se idempotent. Bei Aktualisierungen ist dies nicht allgemeingültig beantwortbar.

Transactional Outbox

Das Konzept Transactional Outbox löst das Problem, Messages transaktional sicher an den Message Bus zu übergeben, ohne verteilte Transaktionen zu verwenden, wenn gleichzeitig persistiert wird. Zur Nutzung wird auch hier eine Bibliothek des Schleupen-Frameworks verwendet, die per Installer im Dependency Injection Container angeschlossen wird.

Die eigentliche Nutzung erfolgt wie in Gateways beschrieben.

 
Cookie Consent mit Real Cookie Banner