有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在失败时重新调度Apache Camel Quartz(CronScheduledOutPolicy)端点路由

这是我的数据处理计划(cronscheduledrutepolicy)

    <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&amp;jmsMessageType=Text" />
        </onException>
    </route>

它每天早上12点01分运行,问题是如果出现任何错误,如何使用计划id或路线id手动重新运行或重新计划

谢谢


共 (2) 个答案

  1. # 1 楼答案

    好的,既然你已经澄清了你的问题,你需要两种方法来处理你的数据:首先通过cron计划,然后手动

    我建议您将其分为3条路径(这显然是JavaDSL,但您可以轻松地将其转换为xml)

    1. 第一个路由是quartz调度-它调用处理路由

      from("quartz://schedule?cron=0+1+0+*+*+?+*")
          .to("direct:doProcessing")
      ;
      
    2. 第二条路线进行处理

      from("direct:doProcessing")
          // do awesome stuff here...
      ;
      
    3. 第三种方法是手动重启

      from("timer://manualRestart?repeatCount=1")
          .routeId("manualRestart")
          .noAutoStartup()
          .to("direct:doProcessing")
      ;
      

    现在,您可以使用命令行上的route-start命令或类似于fmc的工具启动id为“manualRestart”的路由

    希望这有帮助

  2. # 2 楼答案

    如果遇到异常,可以使用re-delivery policy重新尝试exchange N次

    <route>
        <!  ...  >
        <onException>
            <exception>java.lang.Exception</exception>
            <redeliveryPolicy redeliveryDelay="100000" maximumRedeliveries="3"/>
            <to uri="activemq:queue:DATA.ERROR.MESSAGES?mapJmsMessage=false&amp;jmsMessageType=Text" />
        </onException>
    </route>