Apache camel 如何选择从其他路线开始骆驼路线?

Apache camel 如何选择从其他路线开始骆驼路线?,apache-camel,Apache Camel,选择从另一条路线开始骆驼路线的最佳方式是什么?我的用例是基于数据库中的表发送自动报告。如果表已过时,则应启动获取新数据的路由 我有生成和发送报告的路径,我有从远程服务器获取文件、在本地保存文件、将文件读入数据库并更新数据库日志的路径(如果数据是新的,这会告诉报告路径) 但是如何把它们联系在一起呢 // write to database from(routeFrom) .routeId(routeId) .to(String.format(BEAN_INIT

选择从另一条路线开始骆驼路线的最佳方式是什么?我的用例是基于数据库中的表发送自动报告。如果表已过时,则应启动获取新数据的路由

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

但是如何把它们联系在一起呢

// 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)属性文件中。实际繁重的工作是通过JavaBean完成的


如果数据库中没有可用的当前数据,BEAN\u CHECK\u FILEINDB现在将抛出一个异常。这可以用在camel谓词中,然后我可以用camel的选择。但是我如何从一个选择开始骆驼路线呢

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

.choice()
    .when(<your no-data-available predicate>)
        .to("controlbus:route?routeId=<yourRouteId>&action=suspend")
    .otherwise()
        .to(<continue to process db-contents>);
.choice()
.when()
.to(“控制总线:路由?路由ID=&action=suspend”)
.否则()
.to();
停止
开始
暂停
恢复
作为操作可用。如果您想多次停止/启动路线,
suspend
resume
听起来更合适,但我不知道确切的区别


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

查看控制总线EIP/组件,在该组件中可以从其他路由启动|停止路由。