Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

18.8.14. フロー制御

フロー制御は、クライアントまたはサーバーがデータでオーバーロードしないように、クライアントとサーバー間のデータフローを制限するために使用されます。
  • Consumer Flow Control: クライアントがメッセージを消費する際にサーバーとクライアント間のデータのフローを制御します。パフォーマンス上の理由から、クライアントは通常、receive() メソッドを介してコンシューマーに配信したり、メッセージリスナーを介して非同期的にコンシューマーに配信する前にメッセージをバッファーします。
    レート制限のあるフロー制御: コンシューマーがメッセージを消費できるレートを制御できます。これはスロットリングの形式であり、コンシューマーが指定のレートよりも速いメッセージを消費しないようにすることができます。この機能を有効にするには、レートは正の整数である必要があります。1 秒あたりのメッセージ単位で指定される必要なメッセージ消費率の最大値です。これを -1 に設定すると、レート制限フロー制御が無効になります。デフォルト値は -1 です。

    例18.8 JMS を使用したレート制限フロー制御

    JNDI を使用して接続ファクトリーを検索する場合は、standalone.xml または domain.xml で最大レートを設定できます。
    <connection-factory name="ConnectionFactory">
    	<connectors>
    		<connector-ref connector-name="netty-connector"/>
    	</connectors>
      <entries>
      	<entry name="ConnectionFactory"/>
      </entries>
      <!-- We limit consumers created on this connection factory to consume messages at a maximum rate of 10 messages per sec -->
    	<consumer-max-rate>10</consumer-max-rate>
    </connection-factory>
    接続ファクトリーが直接インスタンス化されている場合、HornetQConnectionFactory.setConsumerMaxRate(int consumerMaxRate) メソッドを使用して最大レートサイズを設定できます。
  • プロデューサーフロー制御: サーバーが大きすぎないように、クライアントからサーバーに送信されるデータ量をサーバーに制限します。
    ウィンドウベースのフロー制御: HornetQ プロデューサーは、ジャーナルに十分なクレジットがある限り、メッセージをアドレスに送信できます。メッセージの送信に必要なクレジットの量は、メッセージのサイズで指定されます。プロデューサーはクレジットが少ないため、サーバーがより多くのクレジットを送信すると、より多くのメッセージを送信できます。プロデューサーリクエストのクレジットの量は、ウィンドウサイズ と呼ばれます。

    例18.9 JMS を使用したプロデューサーウィンドウサイズフロー制御

    JNDI を使用して接続ファクトリーを検索する場合は、プロデューサーウィンドウサイズを standalone.xml または domain.xml で設定できます。
    <connection-factory name="ConnectionFactory">
       <connectors>
          <connector-ref connector-name="netty-connector"/>
       </connectors>
       <entries>
          <entry name="ConnectionFactory"/>
       </entries>
       <producer-window-size>10</producer-window-size>
    </connection-factory>
    接続ファクトリーが直接インスタンス化されている場合、HornetQConnectionFactory.setProducerWindowSize(int producerWindowSize) メソッドを使用してプロデューサーウィンドウサイズを設定できます。