使用Camel中的Java DSL中的RequestConfig向http4客户端添加套接字超时

时间:2017-02-28 13:11:41

标签: apache-camel apache-httpclient-4.x

所以,我有route基本上看起来像这样 -

from("direct:send_success")
        .to("http4://localhost:8089/mock/success?httpClient.socketTimeout=1000");

使用这种方式,我能够成功应用1秒的套接字超时。我正在使用ProducerTemplate来调用此路由。这一切都很好。但是当我改变路线时 -

from("direct:send_success")
    .to("http4://localhost:8089/mock/success");

并将路由调用到 -

ProducerTemplate pt = ctx.createProducerTemplate();
Exchange ex = pt.send("direct:send_success", exOb -> {
    HttpComponent httpComp = exOb.getContext().getComponent("http4", HttpComponent.class);
    exOb.getContext().getComponent("http4", HttpComponent.class).setHttpClientConfigurer(httpClientBuilder -> {
            HttpClientBuilder
                .create()
                .setDefaultRequestConfig(requestConfigWithTimeout(1000))
                .build();
        });
});

方法requestConfigWithTimeout()为 -

private static RequestConfig requestConfigWithTimeout(int timeoutInMilliseconds) {
    return RequestConfig.copy(RequestConfig.DEFAULT)
            .setSocketTimeout(timeoutInMilliseconds)
            .build();
}

未应用超时设置。我哪里错了?

1 个答案:

答案 0 :(得分:2)

在创建并启动Camel路由后,您无法更改http组件。然后使用http4组件创建路径,该组件未使用额外代码更改其配置。

因此,请先配置http4组件,而不要在发送消息时配置。