2

私はMessage Driven Beanしばらくの間 JMS を使用してきましたが、非同期タスクでうまく機能しています。非同期プロセスを処理する方法がたくさんあることは知っていますが、JMS を使用する利点とはMessage Driven Bean何かScheduledThreadPoolExecutor?

たとえば、いくつかのタスクを非同期で処理する Web サービスがあります。そのため、主な違いが 2 つあります。アプリケーションサーバーが不要な場合はScheduledThreadPoolExecutor、EJB を使用していないため、Tomcat などにサーブレットコンテナーを使用できます。MDB には、Glassfish などのアプリケーションサーバーが必要です。しかし、実際の非同期プロセスを処理するという点では、 と のそれぞれに比べてどのような利点がScheduledThreadPoolExecutorありMDBますか?

4

1 に答える 1

4

ScheduledThreadPoolExecutorはタスクのスケジュールに使用されますが、MDB に最もよく対応する抽象化はExecutorServiceです。しかし、あなたの質問に戻ります。

MDB はより重量があり、API ははるかに複雑であり、原則として、実際にはロジックではなくデータを転送するように設計されています。一方ExecutorService、実際のスレッド プールの上には薄いレイヤーがあります。したがって、パフォーマンス、低レイテンシ、および小さなオーバーヘッドが必要な場合は、通常のスレッド プールを使用してください。

MDB と JMS を使用する唯一の理由は、耐久性とトランザクションのサポートが必要な場合です。もちろん、各メッセージを永続化する必要があるため、さらに大きなオーバーヘッドが発生します。ただし、キューに入れられたタスクや、処理の途中でさえ、クラッシュによって失われるタスクが失われることはありません。

于 2013-02-13T20:10:02.970 に答える