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/组件,在该组件中可以从其他路由启动|停止路由。