Ich habe eine Einstellung wie folgt.Apache Kamel Idempotent Verbraucher Schlüssel Entfernung
Das Problem, das ich habe, ist, dass der Schlüssel aus dem Idempotent Repository nicht entfernt wird, wenn eine Ausnahme ausgelöst wird (in der Zeile unten angegeben) bei Verwendung seda
Komponente innerhalb OnException
. Wenn ich direct
in OnException
benutze, wird der Schlüssel aus dem Cache entfernt. Bei beiden Versuchen wird die E-Mail korrekt gesendet.
Meine Abfragen sind:
- warum wird der Schlüssel aus dem Repository-Cache nicht, wenn innerhalb der
OnException
mitseda
entfernt werden? - gibt es ein Problem mit der Verwendung von
seda
innerhalb derOnException
? Hier
ist die Routen:
MyRouteClass1
onException(Exception.class)
.setHeader("subjectText", simple("failure email!"))
.to("seda:notifySupportOnFailure")
.end();
from("direct:findWorkItems")
.bean(someService, "findWorkItems")
.split(body())
.throttle(1).timePeriodMillis(5000L)
.to("direct:handleWorkItem")
.choice().when(header("resultId").isGreaterThan(0))
.bean(someService, "updateWorkItemToHandled")
.end();
from("direct:handleWorkItem")
.idempotentConsumer(simple("${body.workItemId}"), duplicatesRepo)
.bean(someService, "handleWorkItem") // e.g. exception would be thrown within here
.setHeader("resultId", body())
.end();
MyRouteClass2
from("seda:notifySupportOnFailure")
.setHeader("from", simple("[email protected]"))
.setHeader("to", simple("[email protected]"))
.setBody(simple("Failure:\n ${exception.message} \n\ndetail: \n${body}"))
.to("smtp://localhost")
.log("Failure email now sent.")
.end();
Ich habe auch eine andere Abhilfe versucht. Ich habe die onException Klausel wie unten geändert. Dies ermöglicht es, den Schlüssel aus dem Repository zu entfernen, wenn die Ausnahme ausgelöst wird. Ich frage mich, ob das ein richtiger Ansatz ist?
onException(Exception.class)
.setHeader("subjectText", simple("failure email!"))
.multicast().to("seda:notifySupportOnFailure").end()
.end();
Um einige zusätzliche Informationen dazu hinzuzufügen. Das Repository umfasst Folgendes: IdempotentRepository duplicatesRepo = MemoryIdempotentRepository.memoryIdempotentRepository (100); Die Version von Apache Camel verwendet wird, ist 2.16.2 –
izzymike109