【问题标题】:Manage Timeout with Apache Camel使用 Apache Camel 管理超时
【发布时间】:2018-08-24 20:04:22
【问题描述】:

我有以下路线定义:

@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

Camel 重试 3 次,不遵守超时时间。

我试过用:

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

没有成功...

我错过了什么?

【问题讨论】:

    标签: java request apache-camel timeout


    【解决方案1】:

    .keepAliveTime(3000) 不适用于 HTTP 端点,它是 Java 本身的 JVM 线程池的 API。您可以在 Java API for thread pools 中阅读有关此选项的信息,并且在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      相关资源
      最近更新 更多