如何从其他路线选择启动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>);
有stop
,start
,suspend
和resume
作为行动。如果你想多次停止/开始路线,suspend
和resume
听起来更合适,但我不知道确切的区别。
请注意,.to(...)
只接受静态端点地址。如果要将表达式作为路径ID插入,则必须使用.toD(...)
以上是关于如何从其他路线选择启动Camel路线?的主要内容,如果未能解决你的问题,请参考以下文章