0

我有一个处理链需要在第二个顶部输出数据,即

System.currentTimeMillis() % 1000 == 0

在 +/- 100 毫秒内。所以,我设置了一个石英定时器如下;

<quartz:inbound-endpoint repeatInterval="1000" responseTimeout="10000" doc:name="Quartz" jobName="publisher" startDelay="900">
    <quartz:event-generator-job/>
</quartz:inbound-endpoint>

我注意到时间间隔以 1 秒的间隔相当稳定,但一秒内的对齐是随机的,可能取决于计时器第一次启动的时间。例如,我上次测试运行的输出时间

System.currentTimeMillis() % 1000 == 449

我推测 startDelay 仅适用于第一个间隔。我还猜测如果我插入一个使用 Thread.sleep 偶尔调整它的自定义拦截器,我可能会调整计时器对齐。即,如果它在 449 唤醒,则 Thread.sleep(451)。或者,我可以将石英设置为每 50 毫秒触发一次,并使用自定义拦截器过滤掉我想要的时间范围之外的事件。

是否有更清洁的“纯粹”方法让 Mule 做到这一点?

4

1 回答 1

2

替换repeatInterval为每秒钟触发一次的 Cron 表达式。

根据用户指南中描述的 Quartz 支持的语法,以下应该可以工作:0/1 * * ? * *

于 2013-03-08T17:58:38.297 回答