我想使用http4路由,但让它在超时的线程内执行。我已经有了我的http4路由设置,如下所示:
from("direct:start")
.setHeader(Exchange.HTTP_QUERY,simple("format=json&count=${in.headers.count}"))
.to("http4://www.host.com/someapi")
.unmarshal().json(JsonLibrary.JACKSON,MyResponseType.class)
.to("bean:SomeBean?method=echo");
我想在http调用周围应用100ms超时,并在这种情况下路由到失败处理程序。有谁知道怎么做?
答案 0 :(得分:4)
您可以通过指定http4://foo?httpClient.soTimeout=100
在客户端上设置100毫秒超时。当发生超时时,它可能会抛出一个你可以像这样处理的异常(在我的头顶,未经测试的代码):
onException(IOException.class).to("direct:timeouts");
from("direct:start")
.setHeader(Exchange.HTTP_QUERY,simple("format=json&count=${in.headers.count}"))
.to("http4://www.host.com/someapi?httpClient.soTimeout=100")
.unmarshal().json(JsonLibrary.JACKSON,MyResponseType.class)
.to("bean:SomeBean?method=echo");
from("direct:timeouts").to("...");
答案 1 :(得分:0)
收件人列表EIP具有超时支持 http://camel.apache.org/recipient-list.html
答案 2 :(得分:0)
更新...我认为超时配置的语法在更高版本的 Camel 中发生了变化。在 Camel 2.16.2 中,我发现文档中的超时参数可以通过查询参数选项设置,但它们需要以 httpClient. 为前缀。以下是对我有用的方法:
?httpClient.connectTimeout=10000&httpClient.connectionRequestTimeout=10000&httpClient.socketTimeout=30000
我通过使用小得离谱的值(1 毫秒)进行测试验证,结果产生了“读取超时”错误。
看起来 httpClient 的可用选项是 RequestConfig.Builder 上的 setter 值。