4

既存のシナリオ:2つのアプリがキューを使用して通信しています。それらの1つは常にプロデューサーであり、もう1つは常にコンシューマーです。

「プロデューサー」は、データを生成して独自のストレージに保存します。次に、キューを使用してコンシューマーに送信します。

(Springを使用した)JMSコンシューマー(およびリスナー)の実装について詳しく読むと、メッセージングをポーリングWebサービス呼び出しに簡単に置き換えることができるようです。

これは、JMSリスナーが行うのは、スレッドを開いたままにして、キューをリッスンすることだけだからです。したがって、JMSリスナーConnectionFactoryが10の接続を持つように設定されている場合、10のブロッキングスレッドがあります。

したがって、10個のスレッドを開いたままにする代わりに、1個のスレッドを使用して30秒ごとにポーリングしないのはなぜですか。その1つのポーリングは、応答で100個(またはそれ以上)のデータ項目をWebサービスに送信するようにWebサービスに指示できます。

4

4 に答える 4

4

答えはレイテンシーです。JMSを使用すると、メッセージは送信されたのと同じ秒でコンシューマーに利用可能になります。どのポーリングソリューションでも、平均してポーリング期間の約半分で常に遅延が発生します。

また、ポーリングコンシューマは1秒おきにウェイクアップして実際の呼び出しを実行する必要があるため、これはより多くのCPUとネットワークを消費します。

最後に、重複とトランザクションについて考える必要があります。JMSを正しく設定すると、メッセージを正確に受信することが保証されます。

于 2012-05-23T21:59:20.823 に答える
4

これらは両方とも単なる抽象化です。あなたがそれについて考えるならば、それはあなたがデータをプッシュしている単なるソケットです。本当に異なるのは、各抽象化が行う保証です。クレイジーなことに、実際には、トランスポートとしてHTTPを使用するJMSおよびJMSを介してサービスされるSOAPWebサービスを使用できます。

簡単に言うと、JMSは、メッセージングに関連する一連の保証(確認応答、再配信、フェイルオーバーなど)を指定します。Webサービス(ほとんどの人の考え方)は、主に、トランスポート(HTTP)を記述する仕様の上に、メッセージ形式(SOAP、JSON)を記述する仕様の薄いセットで構成されています。

ポーリングについて。ほとんどのJMS実装はプッシュモデルです。サブスクライバーはブローカーに登録し、メッセージが到着するとサブスクライバーにプッシュされます。プッシュモデルは、プルモデルよりもスループットが高くなります。

于 2012-05-23T22:01:39.387 に答える
0

それは完全にあなたの要件に依存します。JMSベースの通信には、次のような独自の利点があります。

  • ノンブロッキング(非同期)メッセージング
  • 高性能で信頼性の高い負荷分散
  • ハイスループット
  • フォールトトレラント(もう一方の端の消費がオフラインになった場合はどうなりますか)

もちろん、それはすべてコストがかかるので、それはすべてあなたが必要とするものに依存します。1分あたりのメッセージ数が少ない低スループットのシステムで、通信エラーが原因で一部のメッセージが失われる可能性がある場合は、ポーリングベースのWebサービスに切り替えることができます。

于 2012-05-23T21:51:23.410 に答える
0

独自のキューイングサービスを実装したい場合は、お気軽に。唯一の大きな利点は、3番目のコンポーネント(JMSサーバー)に依存する必要がないことです。

10個の追加のスレッドと10個の追加のソケットについてリソースが心配な場合は、JMSサーバーの使用以外にも心配すべき他の問題があります。どちらも問題になるほどの増分費用を宣伝していません。

キューイングがまったく必要ない場合は、Webサービスを順番に呼び出して、それで完了します。

自分で実装する場合は、キュー、永続性と回復(システムが29秒でダウンし、未送信のメッセージが100個失われた場合)、トランザクション回復、再接続ロジックなどを実装する必要があります。

単一のプロデューサーを使用して単一の宛先への単一のキューに対してそれを行う必要があり、JMSサーバーのライセンス料などが年間X千ドルかかる場合は、そうです、確かにそのロジックを自分でやり直すことを考えます。または、JMSサーバーのメモリプレッシャーをコミットしたくない場合。

しかし、JMSサーバーは無料で、私のアプリサーバーに付属しており、5ダースのマウスクリックで構成されており、ほとんどのニーズに「十分に高速」です。それらは今日、ユビキタスなインフラストラクチャです。

オッズは本当に高いので、このホイールを再発明する努力をするだけの価値はありません、IMHO。

于 2012-05-23T21:58:05.970 に答える