0

秒の先頭にデータを出力する必要がある処理チェーンがあります。

System.currentTimeMillis() % 1000 == 0

+/- 100 ミリ秒以内。そこで、Quartz タイマーを次のように設定します。

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

時間間隔は 1 秒間隔でかなり安定していることに気付きましたが、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 に答える