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.
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. –