2017-01-10 4 views
0

以下は、2つのアプローチを使用しています、私はどちらが良いか理解するのを助けてください!その同期プロセス。ActiveMQ Request/Reply Pattern:以下のアプローチでは、以下のような優れたパフォーマンスが得られますか?

アプローチ1:(任意の接続オブジェクトを閉じていない)

以下クラスでのConnectionFactoryを作成し、そのクラスのプール

ConnectionPool.java(ブローカURLと異なるプロデューサのプールを維持することを維持します)

private static Map<String, Producer> producers 
public static ProducerPool getInstance() { 
     if(INSTANCE==null){ 
      producers = Maps.newConcurrentMap(); 
      INSTANCE= new ProducerPool(); 
     } 
     return INSTANCE; 
    } 

Producer.java(ここで作成されたすべての接続オブジェクト)

private ActiveMQConnection connection; 
private ActiveMQSession session; 
private MessageProducer producer; 
return consumer.receive(5000); 

したがって、100 reqもある場合、接続、プロデューサ、セッションは1つだけ維持されます。

アプローチ2:

(クローズすべての接続、セッション、プロデューサ要求ごとではなくシングルトン)3

アプローチ:

(保つのみ接続生きて閉鎖要求ごとにセッションとプロデューサを作成し、要求ごとに閉じられるものを再作成する)

パフォーマンス向上のためのアプローチはどれですか?私たちは再利用できる1つ(接続rセッションrプロデューサ)の要求の応答パターンの最大レベルですか? (誰もがそれを使用する方法の例を支援することができます!)1が従うべき助けてください

PooledConnectionFactory: は一目を持っていました!

答えて

0

これは、本番環境で使用されるのと同じシステム構成でパフォーマンステストを実行しなければ実際には答えられません。最高のパフォーマンスが何であるかを判断するには、あまりにも多くの変数があります。たとえば、ブローカの設定だけを確認するには、次の内容を検証する必要があります。

  • CPUの数はいくつですか?
  • RAMの容量?
  • ネットワークカードのインターフェイス数?
  • ストレージバックエンドに使用されるディスクマウントの数は?
  • 使用されるキューの数は?
  • プロデューサ数?
  • 消費者数?
  • メッセージのサイズ?
  • メッセージ容量(msg/s)?

メッセージのベストプラクティスは、でなく、プリチューンです。私が入るほとんどの顧客は、実際には高いメッセージ量を持っていません。シンプルなシングル接続、シングルセッション、シングルプロデューサーを最初に試してみてください。パフォーマンス要件を満たしている場合は、HAを取得し、メトリックを監視することに集中してください。これらの権利を取得することは、あなたの時間の投資にはるかに高い利益をもたらし、さらに安定したメッセージングプラットフォームと5~10%のパフォーマンス向上を調整しようとします。

注意:ほとんどのメッセージングシステムは、ブローカのディスクの速度によって制限されるため、クライアント側のオブジェクトをキャッシュすると、特定のエッジケースのシナリオでのみ有効です。

関連する問題