C#: Transient Fault Handling

Im Beitrag Enterprise Library: TransientFaultHandling Application Block wurde beschrieben wie man mit Hilfe des TransientFaultHandling Application Block der Enterprise Library flüchtige (engl. transient) Fehler behandeln kann. Neben dem TransientFaultHandling Application Block gibt es noch einige Alternativen, die ich in diesem Beitrag kurz vorstellen möchten. Das wären:

Um die Funktionen der beiden Bibliotheken besser vergleichen zu können wird das gleiche Beispiel wie im Beitrag Enterprise Library: TransientFaultHandling Application Block verwendet.

Palmer

Palmer ist eine einfache .NET-Bibliothek, die es auf einfache Art und Weise erlaubt Wiederholungslogik (engl. retry logic) in die eigene Anwendung einzubauen.

Installation

Palmer kann ganz einfach über den NuGet-Paketmanager installiert werden. Innerhalb von Visual Studio sieht das wie folgt aus:

TransientFaultHandling_01

Das Paket ist hier zu finden: https://www.nuget.org/packages/Palmer/

Beispiel

Das Beispiel aus Beitrag Enterprise Library: TransientFaultHandlingApplicationBlock könnte mit Palmer so umgesetzt werden:

Ausgabe:

TransientFaultHandling_02

Weitere Beispiele

Retry forever

Non-Exception Failures

Multiple Exceptions

Weitere Beispiele sind auf der Projekt-Website zu finden: https://github.com/mitchdenny/palmer

Polly

Polly ist ebenfalls eine .NET-Bibliothek für die transiente Fehlerbehandlung, die einen ähnlichen Ansatz wie der TransientFaultHandling Application Block der Enterprise Library verfolgt. Auch hier gibt es diverse Eigenschaften (Exception, Retries, Wait, …) für die Wiederholungsstrategie, die sich dank der Fluent-API leicht kombinieren lassen.

Installation

Polly lässt sich auch ganz einfach über den NuGet-Paketmanager installieren. Innerhalb von Visual Studio sieht das wie folgt aus:

TransientFaultHandling_03

Das Paket ist hier zu finden: https://www.nuget.org/packages/polly

Beispiel

Das Beispiel aus Beitrag Enterprise Library: TransientFaultHandlingApplicationBlock könnte mit Polly so umgesetzt werden:

Dank der Fluent-API können die Zeilen 22-23 und 26 zusammengefasst werden:

Ausgabe:

TransientFaultHandling_04

Weitere Beispiele

Retry

Retry forever

Retry and Wait

Weitere Beispiele sind auf der Projekt-Website zu finden: https://github.com/michael-wolfenden/Polly

Wie an den Beispielen zu sehen ist es mit den beiden Bibliotheken relativ einfach Wiederholungsstrategien für die verschiedensten Szenarien zu implementieren. Palmer ist recht einfach und schnell in die eigene Anwendung einzubauen und eignet sich eher für einfache Aufgaben. Die Bibliothek Polly bietet dagegen schon einiges mehr an Funktionalität. Vom Funktionsumfang ist Polly am ehesten mit dem TransientFaultHandling Applicaton Block der Enterprise Library vergleichbar. Welche Bibliothek man schlussendlich einsetzen möchte hängt von den eigenen Anforderungen bzw. der Anwendung ab. Weitere Informationen und Beispiele sind auf der jeweiligen Projektseite zu finden (siehe dazu die nachfolgenden Weblinks).

Literaturverzeichnis und Weblinks

Abk.Quelle
[1]Palmer
Palmer is a .NET library that presents a fluent-API which makes it easier to write retry logic. Palmer is developed and maintained by Mitch Denny and is released under the MIT license.
https://github.com/mitchdenny/palmer/
[2]Polly
Polly is a .NET 3.5 / 4.0 / 4.5 / PCL (Profile 259) library that allows developers to express transient exception handling policies such as Retry, Retry Forever, Wait and Retry or Circuit Breaker in a fluent manner.
https://github.com/michael-wolfenden/Polly
Fork me on GitHub