Camel Java Routebuilder超时
我有一个定义了以下路线的Camel routebuilder:Camel Java Routebuilder超时,java,apache-camel,Java,Apache Camel,我有一个定义了以下路线的Camel routebuilder: from(route).routeId("route1") .bean(myBean) .setHeader(Exchange.HTTP_METHOD, constant("GET")) .to("log:get-data-request?level=INFO&ShowHeaders=false&ShowBody=true
from(route).routeId("route1")
.bean(myBean)
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.to("log:get-data-request?level=INFO&ShowHeaders=false&ShowBody=true")
.to(myURI)
.to("log:get-data-response?level=INFO&ShowHeaders=false&ShowBody=true")
有没有可能给这个路由添加一个超时,这样如果myURI的回复时间超过10秒,它就会抛出某种异常
目前,如果没有即时响应,我的应用程序似乎会挂起等待的请求。有两种方法:
public static void main(String[] args) {
JndiContext jndiContext = (new SetJndiContext()).SetJndiContext();
CamelContext camelContext = new DefaultCamelContext(jndiContext);
try {
//camelContext.addRoutes(new MyRouteBuilder());
camelContext.addRoutes(new FileDownloadRouter());
camelContext.start();
Thread.sleep(10000);
camelContext.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
基本上,当路由开始运行时,上下文将在10秒内自动关闭。同样,这不是理想的方法。选项1是正确的方法,但此方法也会起作用。您能否指定toUri的端点类型
- 如果它是HTTP[1]端点,并且您正在调用REST端点,那么您可以使用所需的SocketTimeout在HTTP调用下面设置Apache HTTP组件
- 如果要调用另一个Camel端点,可以使用Camel提供的异步[2]策略。在将来的交换中,您可以设置原始端点等待的时间。但是,第二个线程可以保持活动状态并完成任务
[2] ?从上面的代码可以看出,您可以使用camel http组件进行http调用。例如,也许将soTimeout设置为10秒对您来说是一个解决方案?@soilworker您有没有一个示例,说明如何将soTimeout合并到我的routebuilder中?我看到这是使用纯Java代码实现的,但不是作为routebuilder的一部分。“HttpClientParams上的httpClient.XXX空设置选项。例如httpClient.soTimeout=5000将SO_超时设置为5秒。”