骆驼 Java Routebuilder 超时
Camel Java Routebuilder Timeout
我有一个 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")
.to(myURI)
.to("log:get-data-response?level=INFO&ShowHeaders=false&ShowBody=true")
是否可以为此路由添加超时,以便如果来自 myURI 的回复花费的时间超过 10 秒,它会抛出某种异常?
目前,如果没有立即响应,我的应用程序似乎会挂起等待请求。
有两种方法可以做到这一点:
@soilworker 已经解释过 - http://localhost:9080/myservice?httpClient.soTimeout=5000. See unit test here.
这不是正确的方法,但适用于简单的场景。
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 端点,您可以在 http 调用下方使用您想要的 SocketTimeout 设置 Apache HTTP 组件。
- 如果你想调用另一个 Camel 端点,你可以使用 Camel 提供的 Async [2] 策略。使用 Future Exchange,您可以设置原始端点等待的时间。但是第二个线程可以保持活动并完成任务。
[1] http://camel.apache.org/http.html
[2] http://camel.apache.org/async.html
我有一个 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")
.to(myURI)
.to("log:get-data-response?level=INFO&ShowHeaders=false&ShowBody=true")
是否可以为此路由添加超时,以便如果来自 myURI 的回复花费的时间超过 10 秒,它会抛出某种异常?
目前,如果没有立即响应,我的应用程序似乎会挂起等待请求。
有两种方法可以做到这一点:
@soilworker 已经解释过 - http://localhost:9080/myservice?httpClient.soTimeout=5000. See unit test here.
这不是正确的方法,但适用于简单的场景。
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 端点,您可以在 http 调用下方使用您想要的 SocketTimeout 设置 Apache HTTP 组件。
- 如果你想调用另一个 Camel 端点,你可以使用 Camel 提供的 Async [2] 策略。使用 Future Exchange,您可以设置原始端点等待的时间。但是第二个线程可以保持活动并完成任务。
[1] http://camel.apache.org/http.html [2] http://camel.apache.org/async.html