我有一个处理链需要在第二个顶部输出数据,即
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 做到这一点?