如何从其他路线选择启动Camel路线?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从其他路线选择启动Camel路线?相关的知识,希望对你有一定的参考价值。

从另一条路线选择启动骆驼路线的最佳方法是什么?我的用例是我根据数据库中的表发送自动报告。如果表是陈旧的,则应启动获取新数据的路径。

我有生成和发送报告的路由,我有一个从远程服务器获取文件的路由,在本地保存文件,将其读入数据库并更新数据库日志(如果数据是新的,这告诉报告路由) 。

但是如何将它们联系在一起?

// write to database
   from(routeFrom)
        .routeId(routeId)
        .to(String.format(BEAN_INIT_DB_TABLE, routeId))
        .to(String.format(BEAN_VALIDATE_TABLE_COLUMNS, routeId))
        .to(String.format(BEAN_LOAD_CSV_FILE_TO_DB, routeId));

// fetch from database
   from(reportFrom)
        .routeId(reportRouteId)
        .to(String.format(BEAN_CHECK_FILEINDB, reportRouteId)
        .to(String.format(BEAN_LOAD_DB_TABLE_TO_XLSX_FILE, reportRouteId)
        .to(BEAN_START_MAIL, reportRouteId);

在上面的routeFrom中,routeId,reportFrom和reportRouteId在(yml)属性文件中设置,以及其他路由属性。实际繁重的工作是用java bean完成的。

如果数据库中没有可用的当前数据,BEAN_CHECK_FILEINDB现在将抛出异常。这可以用于骆驼谓词,然后我可以使用骆驼的选择。但是我如何从选择中开始骆驼路线呢?

答案

我没有尝试过,但是在评论中使用@ claus-ibsen提到的控制总线功能,它应该是这样的:

.choice()
    .when(<your no-data-available predicate>)
        .to("controlbus:route?routeId=<yourRouteId>&action=suspend")
    .otherwise()
        .to(<continue to process db-contents>);

stopstartsuspendresume作为行动。如果你想多次停止/开始路线,suspendresume听起来更合适,但我不知道确切的区别。

请注意,.to(...)只接受静态端点地址。如果要将表达式作为路径ID插入,则必须使用.toD(...)

以上是关于如何从其他路线选择启动Camel路线?的主要内容,如果未能解决你的问题,请参考以下文章

以成功路线为先决条件的路线(Camel)

opc-ua milo项目的骆驼路线

如何在camel-ftp启动之前添加日志消息?

js代码在导航路线后停止工作而无需重新启动页面

camel-sql 问题(不同的 sql server 版本)

从码头到绝对 URL 的骆驼路线