Gibt es in Apache Camel die Möglichkeit, einen Handler für die Verwaltung von Austauschen zu registrieren, die nicht auf die HTTP-Antwort des Jetty-Endpunkts geschrieben werden können, weil das Zeitlimit für die Fortsetzung erreicht wurde?Camel Exchange abgelaufen über Steg-Fortsetzung
Antwort
Nein, das ist nicht möglich. Vielleicht müssen Sie ein höheres Timeout setzen, wenn Sie einen langsamen Verarbeitungsaustausch haben.
Sie sind willkommen, in den Jetty-APIs zu tauchen, um zu sehen, ob Sie einen Haken für solch ein onTimeout-Ereignis finden und sehen, was es braucht, um das in camel-jetty zu unterstützen.
Ich werde einfach meine Notizen auf, dass hinzufügen, weil ich es in meinem Projekt zur Verfügung gestellt von CamelContinuationServlet im if (continuation.isExpired())
Block wie diese
if (continuation.isExpired()) {
String id = (String) continuation.getAttribute(EXCHANGE_ATTRIBUTE_ID);
// remember this id as expired
expiredExchanges.put(id, id);
log.warn("Continuation expired of exchangeId: {}", id);
consumer.getBinding().doWriteExceptionResponse(new TimeoutException(), response);
return;
}
in Kombination mit einem benutzerdefinierten HttpBinding genannt ErrorHandlingHttpBinding
in meinem Code wie folgt zu modifizieren
public class ErrorHandlingHttpBinding extends DefaultHttpBinding {
@Override
public void doWriteExceptionResponse(Throwable exception, HttpServletResponse response) throws IOException {
if (exception instanceof TimeoutException) {
response.setStatus(HttpServletResponse.SC_GATEWAY_TIMEOUT);
response.getWriter().write("Continuation timed out...");
} else {
super.doWriteExceptionResponse(exception, response);
}
}
}
als Feder bean registriert bei id="errorHandlingHttpBinding"
und in der Komponentenzeichenfolge als jetty:http://localhost:21010/?useContinuation=true&continuationTimeout=1&httpBindingRef=errorHandlingHttpBinding
bezeichnet.
- 1. URL Codierung eines Camel Exchange Body
- 2. Camel Bohne Bindung versucht, den Körper zu Exchange
- 3. So ermitteln Sie den Typ des Camel Exchange-Objekts
- 4. Legendes Apache Camel Dynamisches Routing
- 5. Ausführen eines Exchange 2013-Skripts über PowerShell
- 6. send mail über php an microsoft exchange
- 7. Camel RabbitMq transaktionaler Konsument
- 8. Apache Camel: Was wird gerade geroutet?
- 9. Camel useOriginal Message funktioniert nicht
- 10. Camel Aggregation mit REST-Routen
- 11. Strange Apache Camel Exception
- 12. Camel: getting endpointURI einer verschachtelten Route
- 13. Camel Prozessor Unit/Integration Test
- 14. Aktiviere die Exchange-Eigenschaft, die in Camel eingestellt wurde, nachdem ich externen mocked Service aufgerufen habe
- 15. Wie Exchange-Text festgelegt wird, wenn Apache Camel verwendet wird JXPath-Ausdruckssprache
- 16. Apache Camel MultiCasting - InvalidPayloadException
- 17. Camel cxfrs RESTful client/ProducerTemplate ConnectionTimeout
- 18. TestFlight abgelaufen
- 19. Camel - Inhalt enricher: anreichern() vs pollEnrich()
- 20. Camel - Verwendung der Eigenschaft in Spring DSL
- 21. Stack Exchange API & Benutzerprofil
- 22. Ausführen eines Powershell-Skripts mit Exchange-Snap-In über PHP
- 23. Exchange Daten zwischen zwei Anwendungen über PC auf LAN
- 24. Wie überprüfe ich ein Exchange-Postfach über die Powershell?
- 25. SMTP über Exchange mit integrierter Windows-Authentifizierung (NTLM) mit Python
- 26. Verwirrt über die Unterschiede von AdMob, Ad Exchange und DFP
- 27. Zugriff auf einen Exchange 2007-Öffentlichen Ordner über WebDav?
- 28. Senden von E-Mail über Microsoft Exchange Server
- 29. Apache Camel: Covert JSON zu einem POJO mit Camel Methoden
- 30. Extrahieren der Körper aus einer ActiveMQ Nachricht über Camel
Für jetzt gibt es eine Lösung, aber braucht einige Anpassungen. Sie können sich meinen Vorschlag unten ansehen und bewerten, ob es eine Möglichkeit ist, ihn in Kamelsteg zu bekommen. – micfra
Danke, das scheint eine gute Lösung zu sein. Ich habe ein Ticket darüber geschrieben: https://issues.apache.org/jira/browse/CAMEL-10175. Gerne können Sie an einem Patch/PR arbeiten, um dies sofort zu implementieren. –