骆驼弹簧DSL中的石英聚类

时间:2014-11-20 04:48:28

标签: apache-camel quartz-scheduler

我正在尝试在两台不同的机器中实现“请求恢复”,同时时钟同步。

我的配置如下:

第1步:camel-context.xml

我在camel-context.xml文件中定义了以下路由。

<route id="quartz" trace="true">
  <from uri="quartz2://cluster/quartz?cron=0+0/2+++*+?&durableJob=true&stateful=true&recoverableJob=true">
<route>

第2步:quartz.properties:

我启用了

org.quartz.jobStore.isClustered = true
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.instanceName =ClusteredScheduler

目前我在本地运行两个不同的实例中运行相同的camel应用程序并且群集工作正常。但是,当我尝试测试“请求恢复”时,我会遇到异常。

例外:

[QuartzScheduler_ClusteredScheduler-camelContext-16308243724_ClusterManager] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - ClusterManager: detected 1 failed or restarted instances.
[QuartzScheduler_ClusteredScheduler-camelContext-16308243724_ClusterManager] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - ClusterManager: Scanning for instance "6308270818"'s failed in-progress jobs.
[QuartzScheduler_ClusteredScheduler-camelContext-16308243724_ClusterManager] INFO org.quartz.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Scheduled 1 recoverable job(s) for recovery.
[ClusteredScheduler-camelContext_Worker-1] WARN org.apache.camel.component.quartz2.CamelJob - Cannot find existing QuartzEndpoint with uri: quartz2://cluster/quartz?cron=0+0%2F2+*+*+*+%3F&durableJob=true&recoverableJob=true&stateful=true. Creating new endpoint instance.
[ClusteredScheduler-camelContext_Worker-1] ERROR org.apache.camel.component.quartz2.CamelJob - Failed to execute CamelJob.
**org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: quartz2://cluster/quartz?cron=0+0%2F2+*+*+*+%3F&durableJob=true&recoverableJob=true&stateful=true due to: Trigger key cluster.quartz is already in used by Endpoint[quartz2://cluster/quartz?cron=0+0%2F2+*+*+*+%3F&durableJob=true&recoverableJob=true&stateful=true]**
      at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:545)
      at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:558)
      at org.apache.camel.component.quartz2.CamelJob.lookupQuartzEndpoint(CamelJob.java:123)
      at org.apache.camel.component.quartz2.CamelJob.execute(CamelJob.java:49)
      at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
      at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: java.lang.IllegalArgumentException: Trigger key cluster.quartz is already in used by Endpoint[quartz2://cluster/quartz?cron=0+0%2F2+*+*+*+%3F&durableJob=true&recoverableJob=true&stateful=true]
      at org.apache.camel.component.quartz2.QuartzEndpoint.ensureNoDupTriggerKey(QuartzEndpoint.java:272)
      at org.apache.camel.component.quartz2.QuartzEndpoint.addJobInScheduler(QuartzEndpoint.java:254)
      at org.apache.camel.component.quartz2.QuartzEndpoint.doStart(QuartzEndpoint.java:202)
      at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
      at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:2158)
      at org.apache.camel.impl.DefaultCamelContext.doAddService(DefaultCamelContext.java:1016)
      at org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:977)
      at org.apache.camel.impl.DefaultCamelContext.addService(DefaultCamelContext.java:973)
      at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:541)
      ... 5 more

在关闭当前正在排除作业的instance1之后,实例2正在尝试立即恢复作业,但是它无法执行作业。它在下一个间隔中选择相同的作业(这很好)。

我的要求是主动节点立即恢复失败的作业

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果recoverableJob为true,我认为我们可以避免检查ensureNoDupTriggerKey。我刚为它创建了a JIRA CAMEL-8076

相关问题