1

Quartz フレームワークのジョブに BlockingQueue を渡す方法はありますか? BlockingQueue を渡すために JobDataMap を使用しようとしましたが、うまくいかないようです。関連するコードフラグメントは次のとおりです。

JobDetail job = newJob(Jobby.class)
  .withIdentity("myJob", "group1")
  .usingJobData("buffer", queue)
  .build();

おそらく誰かがこれを達成する方法について考えを持っています。

4

1 に答える 1

1

プロデューサーが作業をキューに配置し、コンシューマーが Quartz を使用して定期的にそのキューをチェックするプロデューサー/コンシューマー設計パターンを実装しようとしているようです。この設計は悪くありませんが、実装は機能しません。そのキューをジョブ データに渡すことで、Quartz はそれをシリアル化し、ジョブがトリガーされたときに逆シリアル化します。キューは参照ではなく値 (コピー) で渡されます。これは、Quartz が分散環境で動作する必要があることを理解していれば理解できます。この場合、ジョブはスケジュールされて 1 つのノードでデータベースに永続化され、別のノードで逆シリアル化されて実行されます。

そうは言っても、実装を再評価する必要があります。クラスタリングと分散を気にしない場合は、何らかの方法でキューをグローバルに利用できるようにします。オプションは次のとおりです。

を使用することを特にお勧めします。 も良いオプションです。について話している場合は、Quartz の代わりに軽量のレイテンシーを回避できます。

于 2012-06-05T08:02:33.710 に答える