Camel cxfrs RESTful клиент / ProducerTemplate ConnectionTimeout
Я пытаюсь установить 'connectionTimeout' для компонента Camel CXF-RS, который выдает запросы RESTful на сторонней службе. По умолчанию 30000
миллисекунды это долго.
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);
}
});
Я попытался добавить это к нашему application-context
как многие предлагали, но не вижу его изменения значений по умолчанию при отладке через HTTPConduit
а также HTTPClientPolicy
классы:
<http-conf:conduit name="*.http-conduit">
<http-conf:client ConnectionTimeout="5000"/>
</http-conf:conduit>
и я попытался добавить
"?httpClientAPI=true&connectionTimeout=5000"
в качестве параметров строки URL.
Любая помощь или руководство будет высоко ценится.
1 ответ
Добавление http-conf:conduit
элемент в application-context
как вы сделали, это путь и должен работать. Что заставляет вас говорить, что нет?
Довольно часто бэкэнд-сервер слишком долго отвечает после установления соединения; в этом случае настройки ReceiveTimeout
так же важно, как ConnectionTimeout
,
Это пример верблюжьего маршрута, который потребляет запросы RS и вызывает сторонний сервер RS; параметры ReceiveTimeout и ConnectionTimeout работают должным образом.
<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>