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>
Другие вопросы по тегам