Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Camel Java Routebuilder超时_Java_Apache Camel - Fatal编程技术网

Camel Java 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

我有一个定义了以下路线的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-解释。参见单元测试

  • 这不是正确的方法,但在一个简单的场景中会起作用

    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]策略。在将来的交换中,您可以设置原始端点等待的时间。但是,第二个线程可以保持活动状态并完成任务
    [1]
    [2]

    ?从上面的代码可以看出,您可以使用camel http组件进行http调用。例如,也许将soTimeout设置为10秒对您来说是一个解决方案?@soilworker您有没有一个示例,说明如何将soTimeout合并到我的routebuilder中?我看到这是使用纯Java代码实现的,但不是作为routebuilder的一部分。“HttpClientParams上的httpClient.XXX空设置选项。例如httpClient.soTimeout=5000将SO_超时设置为5秒。”