Camel Main处理大文件并停止路由并从JVM退出

时间:2020-03-29 13:41:37

标签: java apache-camel

我需要使用这两种情况处理大文件 (1)从文件目录拉入并推入FTP (2)从一个FTP拉到另一个FTP

我正在创建一个Java Maven依赖项目,该项目使用骆驼组件来处理上述文件传输用例,因此我决定使用org.apache.camel.main.Main类来启动我的路线,但是问题是我的即使成功处理了文件,程序也没有关闭。我读过某个地方,使用“ System.exit()”可以解决问题,但仍然存在问题。

我的代码-

  SELECT
        DATE_FORMAT(pickup.created_at,'%Y-%m') as 'service_year_month',
        count(pickup.id) as total_pickup_id,
        (SELECT COUNT(*) from pickup WHERE pickup.material = "PAPER") as paper_pickups,
        (SELECT COUNT(*) from pickup WHERE pickup.material = "OTHER") as other_pickups,
        (SELECT COUNT(*) from pickup WHERE pickup.material = "PLASTIC") as plastic_pickups,
        (SELECT COUNT(*) from pickup WHERE pickup.material = "WOOD") as wood_pickups,
        (SELECT COUNT(*) from pickup WHERE pickup.material = "GLAS") as glas_pickups,
        (SELECT COUNT(*) from pickup WHERE pickup.material = "METAL") as metal_pickups
    FROM
        pickup
        left join container on
        pickup.container_id = container.id
    WHERE
        container.pickup_mode = 'ON_DEMAND'
    group by service_year_month
    order by service_year_month desc;

RouteBuilder

Main camelMain = new Main();
camelMain.enableHangupSupport();
camelMain.addRouteBuilder(getRouteBuilderLocaltoFTP());
camelMain.run();

也尝试使用Control-Bus .toF(“ controlbus:route?routeId =%s&action = stop&async = true”,“本地FTP”)

但是在两种情况下,路由都会正常关闭,而不是关闭程序。

寻求帮助。

2 个答案:

答案 0 :(得分:1)

您可以在主机上配置X时间段后或处理N条消息后关闭应用程序。并且您可以将它们都设置为“正常”,例如2分钟后和处理1条消息后关闭。

只需检查camelMain上的方法。请注意,这需要最新版本的Apache Camel。

答案 1 :(得分:0)

here中记录了各种方式的正常关机。您可以尝试使用此代码关闭特定路由

camelContext.getRouteController().stopRoute("routeId");
camelContext.removeRoute("routeId");