我正在开发自定义的驼峰组件。它只有消费者支持意味着它可以在从仅端点中调用。我们假设我的自定义组件使用'mycomp'方案注册。
要求1:我们有需要支持以下路径的用例。
从( “mycomp:东西”),以( “文件:数据/发件箱”);
以上路线正在运行,因为我已经为端点提供了createConsumer()
的实现要求2:现在,我们还有另一项要求,即在特定时间启动上述路线。 (假设每天上午08:00)
对于Req2,我决定使用驼峰石英组件。我们知道,quartz还支持仅来自端点,而来自端点的我的req2将会像..
从( “石英:// myTimer的cron = 0 + 0 + 8 + * + + * *”)
现在,问题:
我的自定义组件需要来自()端点,并且还需要在特定时间触发。但是quartz也只能使用from()端点。在Camel中,我不能有两个来自...的路由(“xxx”)。来自(“yyy”)..
解决方法之一:
我可以开发处理器,启动为“mycomp”定义的路由,最终路由将类似..
从( “石英:// myTimer的cron = 0 + 0 + 8 + * + + * *”).process(ProcessorWhich_的 StartsMyRoute );
从( “mycomp:东西”)。的 noAutoStartup ()的路由ID ( “ MyRoute ”)到(“文件:。数据/发件箱“);
但我需要再次提出使用石英调度在特定时间停止MyRoute的处理器..它会像...
从( “石英:// myTimerStop的cron = 0 + 30 + 8 + * + + * *”).process(ProcessorWhich_的 StopsMyRoute );
上面,我在上午8:30停止。但这是这个解决方案的限制,在现实生活中我不知道什么是停止MyRoute的安全时间。
请分享您关于如何同时实现Req1和Req2的想法/意见。 请询问您是否需要有关我的用例的更多详细信息。
答案 0 :(得分:0)
第二种解决方法/解决方案:
与此同时,我找到了另一种方法来实现这一目标。
我开发了一个处理器,首先调用suspendRoute(),然后立即调用resumeRoute()方法进行“mycomp”方案的路由..如下所示...
<强>路线:强>
从( “石英:// myTimer的cron = 0 + 0 + 8 + * + + * *”).process(ProcessorWhich_的 SuspendResumeMyRoute 强>);
从( “mycomp:东西”)noAutoStartup()路由ID( “MyRoute”)来。( “文件:数据/发件箱”);
<强>处理器强>
public void process(Exchange exchange) throws Exception {
CamelContext ctx = exchange.getContext();
ctx.suspendRoute(routeName);
ctx.resumeRoute(routeName);
}
现在,超过两个;第二个看起来更接近理想的解决方案。 任何人都可以像上面那样分享暂停()和恢复()路线所需的一切(wrt性能和设计)。使用第二种解决方案,MyRoute将在8:00 AM和8日再次开始:00:00它首先暂停然后恢复,并在第三天再次上午8:00暂停。暂停,然后恢复。
答案 1 :(得分:0)
可能只是使用cron-sheduled路线政策?
这是一个有用的链接 - documentation
只需创建新政策,设置开始时间或停止时间或任何您想要的内容,然后将政策添加到您的路线中。
例如;
CronScheduledRoutePolicy yourPolicy = new CronScheduledRoutePolicy();
//set start time etc on your policy
from("mycomp:Something").routePolicy(yourPolicy).
noAutoStartup().
routeId("MyRoute").
to("file:data/outbox");