Управление Таймаутом с Apache Camel - PullRequest
0 голосов
/ 24 августа 2018

У меня есть следующее определение маршрута:

@Override
public void configure() throws Exception {
    from(String.format("direct:%s", this.connector))
    .id("Route1")
    .threads()
    .maxPoolSize(10)
    .keepAliveTime(3000)
    .timeUnit(TimeUnit.MICROSECONDS)
    .poolSize(1)
    .rejectedPolicy(ThreadPoolRejectedPolicy.Abort)
    .log("Calling WS")
    .maxQueueSize(1)
    .to("http://10.8.4.9:8080/service");
}

И фрагмент запроса выше:

InputStream exchange = (InputStream) template
            .requestBodyAndHeaders(url, AppUtil.parse(this.body, input), this.headers);

Конечная точка намеренно недоступна. Итак, я ожидал, что мой запрос подождет 3 секунды и выдает какое-то исключение как ответ Insted, происходит следующее поведение:

    2018-08-24 16:55:55,048 DEBUG http-nio-8081-exec-2 httpclient.HttpMethodDirector:443 - Connection timed out: connect
java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
... more stack...
    at java.lang.Thread.run(Unknown Source)
2018-08-24 16:56:38,333  INFO http-nio-8081-exec-2 httpclient.HttpMethodDirector:445 - Retrying request
2018-08-24 16:56:38,417 DEBUG http-nio-8081-exec-2 httpclient.HttpConnection:692 - Open connection to 10.8.4.9:8080/service

Верблюд повторяется 3 раза и не учитывает время ожидания.

Я пытался использовать:

onException(ConnectException.class)
.maximumRedeliveries(0);

Не удалось ...

Что я пропустил?

1 Ответ

0 голосов
/ 26 августа 2018

.keepAliveTime(3000) не для конечных точек HTTP, это API для пула потоков JVM в самой Java. Вы можете прочитать об этой опции в Java API для пулов потоков, и в Camel DSL также есть немного javadoc для этого метода.

Если вам нужен тайм-аут HTTP-соединения и т. Д., Вам нужно установить конкретную опцию в конечной точке http.

https://github.com/apache/camel/blob/master/components/camel-http4/src/main/docs/http4-component.adoc#using-client-timeout---so_timeout

...