从另一条路线选择启动骆驼路线的最佳方法是什么?我的用例是我根据数据库中的表发送自动报告。如果表是陈旧的,则应该开始获取新数据的路径。
我有生成和发送报告的路由,我有一条从远程服务器获取文件的路由,在本地保存文件,将其读入数据库并更新数据库日志(这告诉报告路由是否有数据很新鲜。)
但如何将它们联系在一起?
// 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 将抛出异常。这可以在骆驼谓词中使用,然后我可以使用骆驼的选择。但是我如何从选择中开始骆驼路线呢?
答案 0 :(得分:2)
我没有尝试过,但是在评论中使用@ claus-ibsen提到的控制总线功能,它应该是这样的:
.choice()
.when(<your no-data-available predicate>)
.to("controlbus:route?routeId=<yourRouteId>&action=suspend")
.otherwise()
.to(<continue to process db-contents>);
stop
,start
,suspend
和resume
可用作操作。如果您想多次停止/启动路线,suspend
和resume
听起来更合适,但我不知道确切的区别。
请注意.to(...)
仅接受静态端点地址。如果要将表达式作为路径ID插入,则必须使用.toD(...)