Java 使用apachecamel管理超时
我有以下路线定义:Java 使用apachecamel管理超时,java,request,apache-camel,timeout,Java,Request,Apache Camel,Timeout,我有以下路线定义: @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)
@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秒钟,并抛出一些异常作为响应。相反,会发生以下行为:
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);
没有成功
我错过了什么 keepAliveTime(3000)不是用于HTTP端点的,它是Java中JVM线程池的API。您可以在Java API for thread Pool中阅读关于此选项的内容,在Camel DSL中也有一些关于该方法的javadoc
如果需要HTTP连接超时等,则需要在HTTP端点上设置特定选项