Kamelwiederholungskontrolle mit mehreren Ausnahmen

Vorwort: Ich bin ziemlich neu bei Camel, und nachdem ich Camel in Aktion so gut wie möglich verdaut habe, passe ich es an ein Projekt an, an dem ich gerade arbeite. In diesem Projekt gibt es eine ziemlich komplexe Fehlerbehandlung, und ich möchte sicherstellen, dass ich diese replizieren kann, während wir unseren Code kamelisieren.

In unserem Projekt gibt es (wie in den meisten Fällen) eine Reihe von Ausnahmen, die wir wiederholen möchten, und eine Reihe, die wir nicht wiederholen möchten. Genauer gesagt, es gibt eine Reihe, die wir häufiger wiederholen möchten als andere (nicht alle behebbaren Fehler können behandelt werden) das Gleiche). In diesem Fall habe ich versucht, eine zu definierenonException blockieren, um die Richtlinie für die erneute Zustellung zu ändern. Es scheint jedoch, dass die Börse die Zählung beibehält (Exchange.REDELIVERY_COUNTER) und dass diese Anzahl nicht davon abhängt, welche Ausnahme geworfen wird. Gibt es eine Möglichkeit, diese Zählung für eine bestimmte Ausnahme festzulegen?

Zum Beispiel - ich habe zwei AusnahmenFooException undBarException. Auf meiner Route (oder wirklich im gesamten Kontext) möchte ich FooExceptions 10 Mal wiederholen, aberBarExceptions sollte es nur zweimal wiederholen. Der Kontext enthält also:

<onException>
     <exception>my.exception.FooException</exception>
     <redeliveryPolicy maximumRedeliveries="10" redeliveryDelay="2000"
</onException>

<onException>
      <exception>my.exception.BarException</exception>
      <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="5000"
</onException>

Nun zur Sorge - wenn meine Bewerbung einen auslöstFooException und versuche es 4 mal (jedes Mal wenn wir aFooException) und dann beim fünften Versuch wirft es aBarExceptionEs scheint, dass die Art und Weise, wie dies funktioniert, die Exchange haben wirdREDELIVERY_COUNTER Wenn ich die Richtlinie zurücksetze, um es nur zweimal zu versuchen, wird (logischerweise) der Schluss gezogen, dass die Route nicht wiederholt werden sollte, und die Ausnahme wird zurückgesetzt. In meiner Bewerbung jedochBarExceptions sollte zweimal wiederholt werden, egal wie vieleFooExceptions geworfen werden. Und wenn es abwechselnd Foo- und Bar-Ausnahmen auslöst, möchte ich, dass der Zähler nur für die angegebene Ausnahme erhöht wird.

Ganz am Ende von Camel in Action wird für die Verwendung von a geworbenretryWhile - Ist dies die einzige Möglichkeit, die Art von Kontrolle zu erlangen, nach der ich suche? Muss ich eine Stateful-Bean erstellen, die die Anzahl pro Ausnahme kennt? Oder übersehe ich etwas Einfaches? Ich möchte sicherstellen, dass ich uns nicht auf einem hässlichen Weg befinde, wenn ich mich diesem Refactor nähere.

Verwenden von Camel 2.10.1

Antworten auf die Frage(2)

Ihre Antwort auf die Frage