2016-03-21 8 views
3

Ich versuche, den 'connectionTimeout' für eine Camel CXF-RS-Komponente here zu setzen, die eine RESTful-Anfragen auf einem 3rd-Party-Service produziert. Der Standardwert 30000 Millisekunden ist zu lang.Camel cxfrs RESTful client/ProducerTemplate ConnectionTimeout

Exchange exchange = template.send("cxfrs://" + url, new Processor() { 
public void process(Exchange exchange) throws Exception { 
    exchange.setPattern(ExchangePattern.InOut); 
    Message inMessage = exchange.getIn(); 
    setupDestinationURL(inMessage); 
    // using the http central client API 
    inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.TRUE); 
    // set the Http method 
    inMessage.setHeader(Exchange.HTTP_METHOD, "PUT"); 
    // set the relative path 
    inMessage.setHeader(Exchange.HTTP_PATH, url);     
    // Specify the response class , cxfrs will use InputStream as the response     object type 
    inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, Customer.class); 
    // set a customer header 
    inMessage.setHeader("key", "value"); 
    // since we use the Get method, so we don't need to set the message body 
    inMessage.setBody(null);     
} 
}); 

habe ich versucht, diese zu unseren application-context so viele haben vorgeschlagen, aber kann es nicht sehen, die Standardwerte zu modifizieren, wenn die Debugging durch HTTPConduit und HTTPClientPolicy Klassen:

<http-conf:conduit name="*.http-conduit"> 
    <http-conf:client ConnectionTimeout="5000"/> 
</http-conf:conduit> 

und ich habe versucht

Anfügen
"?httpClientAPI=true&connectionTimeout=5000" 

als Optionen für die URL-Zeichenfolge.

Jede Hilfe oder Anleitung wäre sehr willkommen.

Antwort

1

Hinzufügen der http-conf:conduit Element in application-context wie Sie getan haben, ist der Weg zu gehen und sollte funktionieren. Was lässt dich sagen, dass es nicht so ist?

Ziemlich oft dauert ein Backend-Server zu lange, um zu antworten, nach die Verbindung hergestellt wird; In diesem Fall ist die Einstellung ReceiveTimeout genauso wichtig wie ConnectionTimeout.

Dies ist eine Beispiel-Kamel-Route, die RS-Anfragen konsumiert und einen RS-Server eines Drittanbieters aufruft; Die Parameter ReceiveTimeout und ConnectionTimeout funktionieren wie erwartet.

<cxf:rsServer id="rsFrontServer" address="..." serviceClass="..."/> 

<cxf:rsClient id="rsBackendClient" address=".../" serviceClass="..."/> 

<http-conf:conduit name="*.http-conduit"> 
    <http-conf:client ReceiveTimeout="5000" ConnectionTimeout="5000"/> 
</http-conf:conduit> 

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
    <route id="front"> 
     <from uri="cxfrs:bean:rsFrontServer"/> 
     <!-- do stuff --> 
     <to uri="cxfrs:bean:rsBackendClient"/> 
    </route> 
</camelContext>