2016-04-15 5 views
1

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

1

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.

+0

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

+2

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

2

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.

Verwandte Themen