5

Callables またはsを処理できる一般的な非同期 Java ジョブ実行フレームワークを探していますRunnablejava.util.concurrent.ExecutorService, (およびおそらく wrap )に似てExecutorServiceいますが、次の機能も備えています。

  1. ジョブの処理中にアプリケーションがダウンした場合にジョブをデータベースに保持し、未完了のジョブを再開できる機能。(私の仕事は実装する必要があるかもしれないことを理解していSerializableます。)

  2. UUID を使用して、クライアントがジョブ トークンを取得し、ジョブ ステータスを照会できるようにします。(内部では、この情報はデータベースにも保持されます。)

私は を中心に構築することで自分自身でこれに取り組み始めましExecutorServiceたが、すぐに使用できるオープン ソース ソリューションがあればそれを使用したいと思います。

Spring Framework 内で機能するものが理想的です。

4

5 に答える 5

8

Quartzを見たいと思うかもしれません。

Quartz は、最小のスタンドアロン アプリケーションから最大の e コマース システムまで、ほぼすべての J2EE または J2SE アプリケーションと統合したり、一緒に使用したりできる、フル機能のオープン ソース ジョブ スケジューリング システムです。Quartz を使用して、数万、数百、さらには数万のジョブを実行するための単純または複雑なスケジュールを作成できます。タスクが標準の Java コンポーネントまたは EJB として定義されているジョブ。Quartz Scheduler には、JTA トランザクションやクラスタリングなど、多くのエンタープライズ クラスの機能が含まれています。

于 2009-03-04T22:08:01.433 に答える
3

Quartzを使用して、またはに委譲する具象Jobアダプターを作成できます。Quartz のインターフェースは、タスクの呼び出し間で何らかの状態を維持する機能を追加します。必要に応じて、Quartz はジョブとその状態をリレーショナル データベースに永続的に保存し、ホストのスケーラブルなクラスターで実行できます。RunnableCallableJob

于 2009-03-04T22:08:30.107 に答える
2

Alex の指摘をフォローアップすると、Terracotta ソリューションはジョブをデータベースに永続化せず、Terracotta 分散メモリ ストアに永続化します。

Terracotta はメモリ ストアをディスクに永続化するため、これはこれらのジョブをデータベースに配置するより効率的なバージョンです。

同時に、純粋な POJO プログラミング モデルが提供されるため、DB txns や ORM などを扱う必要さえありません。ここであなたを助けたり傷つけたりしても、仕事を分散するのに役立ちます)。

MasterWorker パターンはグリッド上で作業を分散するのに役立ち、DistributedExecutorService の使用を非常に簡単に開始できます。作業の送信は次のようになります。

CompletionService executor = new DistributedCompletionService(new DistributedExecutorService("myTopologyName"));
executor.submit(new MyRunnable(), null);
...
Future f = executor.take();

Terracotta Forge での master-worker 実装のクイックスタート ガイドへのリンクは次のとおりです。

さらに、Terracotta では Serializable を実装する必要はありませんが、必要に応じて実装できます :)

于 2009-03-06T19:29:18.693 に答える
2

http://www.opensymphony.com/quartz/wikidocs/Features.htmlを見て、すでに何かあるかどうかを確認してください。

そのページから:

含まれている JDBCJobStore を使用すると、「非揮発性」として構成されたすべてのジョブとトリガーが JDBC 経由でリレーショナル データベースに格納されます。

于 2009-03-04T22:10:06.360 に答える
2

もう 1 つの方向性は、 Terracottaを使用するようなものかもしれません。これは、JVM でヒープをクラスター化し、可用性のために永続化する機能を備えています。Terracotta は、スケジューリングの観点から有用な場合、Quartzとの統合をサポートします。また、同様に役立つ可能性のあるマスターワーカーおよびメッセージング統合モジュールもあります。Terracotta はオープンソースです。

于 2009-03-05T03:00:33.197 に答える