2016-05-12 2 views
0

Mein Code konsumiert JMS-Warteschlange und über lb Weiterleitungen zu externen HTTP-Client. Ich muss die Originalnachricht für jede fehlgeschlagene Zustellung in das lokale Verzeichnis protokollieren. Problem ist, dass onException von jedem Failover abgefangen wird. Gibt es eine Möglichkeit, dies zu erreichen?Handle Ausnahme von Load Balancer nur einmal (wenn Failover erschöpft ist)

Pseudo-Code:

onException(Exception.class).useOriginalMessage() 
    .setHeader(...) 
    .to("file...") 
    .setHeader(...) 
    .to("file...") 

from("activemq...") 
    .process(...) 
    .loadBalance().failover(...) 
     .to("lb-route1") 
     .to("lb-route2") 
    .end() 
    .process() 
    .to("file...") 

from("lb-route1") 
    .recipientList("dynamic url") 
.end() 

from("lb-route2") 
    .recipientList("dynamic url") 
.end() 
+0

Sie können die CircuitBreaker-Komponente zusammen mit errorHandler dazu verwenden und die Wiederholungsversuche auf 1 beschränken – Sundar

Antwort

0

Ich habe nicht diese Logik mit mehreren Aussagen getestet, aber wenn ich meine Liste von Endpunkten in einem Array dieser Logikfunktionen nur in Ordnung. Ich werde versuchen, zum ersten Endpunkt zu liefern, wenn ich nicht kann, werde ich versuchen, dies an den zweiten Endpunkt zu liefern. Wenn eine Ausnahme am zweiten Endpunkt auftritt, wird sie an den Fehlerhandler der Route weitergegeben. Wenn Sie stattdessen Round-Robin benötigen, ändern Sie den letzten Wert false für die Failover-Anweisung in true.

String[] endpointList = {"direct:end1", "direct:end2"}; 

from("direct:start") 
    .loadbalance().failover(endpointList.length-1, false, false) 
    .to(endpointList); 
Verwandte Themen