Java 如何在失败时重新调度Apache Camel Quartz(CronScheduledOutPolicy)端点路由
这是我的数据处理计划(cronscheduledrutepolicy)Java 如何在失败时重新调度Apache Camel Quartz(CronScheduledOutPolicy)端点路由,java,spring,maven,apache-camel,quartz-scheduler,Java,Spring,Maven,Apache Camel,Quartz Scheduler,这是我的数据处理计划(cronscheduledrutepolicy) <route> <from uri="quartz://schedule?cron=0+1+0+*+*+?+*"/> <bean ref="processData" method="scheduleData" /> <convertBodyTo type="java.util.List" />
<route>
<from uri="quartz://schedule?cron=0+1+0+*+*+?+*"/>
<bean ref="processData" method="scheduleData" />
<convertBodyTo type="java.util.List" />
<to uri="activemq:queue:DATA.GENERATEDLIST?mapJmsMessage=false" />
<onException>
<exception>java.lang.Exception</exception>
<to uri="activemq:queue:DATA.ERROR.MESSAGES?mapJmsMessage=false&jmsMessageType=Text" />
</onException>
</route>
java.lang.Exception
它每天早上12点01分运行,问题是如果出现任何错误,如何使用计划id或路线id手动重新运行或重新计划
谢谢。如果遇到异常,您可以使用重新尝试exchange N次
<route>
<!-- ... -->
<onException>
<exception>java.lang.Exception</exception>
<redeliveryPolicy redeliveryDelay="100000" maximumRedeliveries="3"/>
<to uri="activemq:queue:DATA.ERROR.MESSAGES?mapJmsMessage=false&jmsMessageType=Text" />
</onException>
</route>
java.lang.Exception
如果遇到异常,可以使用重新尝试exchange N次
<route>
<!-- ... -->
<onException>
<exception>java.lang.Exception</exception>
<redeliveryPolicy redeliveryDelay="100000" maximumRedeliveries="3"/>
<to uri="activemq:queue:DATA.ERROR.MESSAGES?mapJmsMessage=false&jmsMessageType=Text" />
</onException>
</route>
java.lang.Exception
好的,既然你已经澄清了你的问题,你需要两种方法来处理你的数据:首先通过cron计划,然后手动
我建议您将其分为3条路径(这显然是JavaDSL,但您可以轻松地将其转换为xml)
from("quartz://schedule?cron=0+1+0+*+*+?+*")
.to("direct:doProcessing")
;
from("direct:doProcessing")
// do awesome stuff here...
;
from("timer://manualRestart?repeatCount=1")
.routeId("manualRestart")
.noAutoStartup()
.to("direct:doProcessing")
;
route start
命令,或通过类似fmc
的工具,使用id“manualRestart”启动路由
希望这能有所帮助。好的,既然你已经澄清了你的问题,你需要两种方法来处理你的数据:首先通过cron计划,然后手动 我建议您将其分为3条路径(这显然是JavaDSL,但您可以轻松地将其转换为xml)
from("quartz://schedule?cron=0+1+0+*+*+?+*")
.to("direct:doProcessing")
;
from("direct:doProcessing")
// do awesome stuff here...
;
from("timer://manualRestart?repeatCount=1")
.routeId("manualRestart")
.noAutoStartup()
.to("direct:doProcessing")
;
route start
命令,或通过类似fmc
的工具,使用id“manualRestart”启动路由
希望这有帮助。谢谢您的回答。我需要一个运行计划手动根据调度程序名称或路线id通过一个用户界面。有可能是因为…@Sureshkumarpannerselvan我不知道一种简单的开箱即用的方法。您可以将失败的交换转发到死信队列,编写客户端向您显示它们,请求您的输入,然后通过MQ向您的组件发送“命令”消息,然后根据命令消息触发路由。是的,我们可以做到。谢谢,谢谢你的回答。我需要一个运行计划手动根据调度程序名称或路线id通过一个用户界面。有可能是因为…@Sureshkumarpannerselvan我不知道一种简单的开箱即用的方法。您可以将失败的exchange转发到死信队列,编写客户端向您显示,请求输入,然后通过MQ发送“命令”消息到组件,然后根据命令消息触发路由。我们可以这样做。谢谢。你能澄清这个问题吗?如果路由失败,你是想手动重新运行路由吗?是的,我需要手动执行。因为我使用多个数据源,并且对于某些计划程序,输入是基于时间的。请澄清问题-如果路由失败,您是否希望能够手动重新运行路由?是的,我需要手动执行。因为我使用多个数据源,并且对于某些调度器,输入是基于时间的。