线程中带超时的java camel http4路由
我想使用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调用周围应用100毫秒的超时,并在这种情况下路由到故障处理程序。有人知道怎么做吗
# 1 楼答案
更新。。。我认为超时配置的语法在更高版本的Camel中已经更改。对于Camel 2.16.2,我发现文档中的超时参数可以通过query param选项设置,但它们需要以httpClient作为前缀。以下是对我有效的方法:
我通过使用小得离谱的值(1ms)进行测试进行验证,结果产生了“读取超时”错误
看起来httpClient的可用选项是RequestConfig.Builder上的setter值
# 2 楼答案
收件人列表EIP具有超时支持 http://camel.apache.org/recipient-list.html
# 3 楼答案
您可以通过指定
http4://foo?httpClient.soTimeout=100
在客户端上设置100ms超时。当超时发生时,它可能会抛出一个您可以像这样处理的异常(在我看来,是未经测试的代码):