第19章 フロー制御


フロー制御は、クライアントとサーバー間のメッセージングデータのフローを制限するために使用されます。これはクライアントまたはサーバーがデータで一杯にならないようによう行われます。コンシューマー側とプロデューサー側の両方からデータのフローを管理できます。

19.1. コンシューマーフロー制御

JBoss EAP メッセージングには、コンシューマーのために事前にフェッチするデータ量を定義する設定とコンシューマーがメッセージを消費できる速度を制御する設定が含まれています。

ウィンドウベースのフロー制御

JBoss EAP メッセージングでは、メッセージを各コンシューマーのバッファーに事前フェッチします。バッファーサイズは connection-factoryconsumer-window-size 属性で決定されます。次の設定例は、consumer-window-size 属性を明示的に設定した connection-factory を示しています。

<connection-factory name="MyConnFactory" ... consumer-window-size="1048576" />
Copy to Clipboard Toggle word wrap

管理 CLI を使用して、特定の connection-factoryconsumer-window-size 属性の値を読み書きします。以下の例は、InVmConnectionFactory 接続ファクトリーを使用して実行する方法を示しています。これはサーバーと同じ仮想マシンに存在するコンシューマー (たとえば、ローカルの MessageDrivenBean) のデフォルトです。

  • 管理 CLI から InVmConnectionFactoryconsumer-window-size 属性を読み取る
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-window-size)
{
    "outcome" => "success",
    "result" => 1048576
}
Copy to Clipboard Toggle word wrap
  • 管理 CLI から consumer-window-size 属性を書き込む
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-window-size,value=1048576)
{"outcome" => "success"}
Copy to Clipboard Toggle word wrap

consumer-window-size の値は整数である必要があります。以下の表に記載されているように、特別な意味を持つ値もあります。

Expand
表19.1 consumer-window-size の値
Value説明

n

バッファーサイズを n バイトに設定するために使用される整数値。デフォルトは 1048576 で、ほとんどの場合はこれで十分です。デフォルト値が適切でない場合は、ベンチマークをすると、ウィンドウサイズの最適な値が見つかるようになります。

0

バッファーをオフにします。これはコンシューマーが遅い場合に役に立つもので、複数のコンシューマーに確定的に分散することができます。

-1

無制限バッファーを作成します。これにより、メッセージを受信するとすぐにプルして処理する非常に高速のコンシューマーを促進することができます。

警告

consumer-window-size-1 に設定すると、コンシューマーがメッセージを受信時にすぐに処理できない場合に、クライアントのメモリーをオーバーフローさせることができます。

コア API を使用している場合、setConsumerWindowSize() メソッドを使用して ServerLocator からコンシューマーウインドウサイズを設定できます。

JMS を使用している場合、クライアントはインスタンス化された ConnectionFactorysetConsumerWindowSize() メソッドを使用してコンシューマーウインドウのサイズを指定できます。

レート制限フロー制御

JBoss EAP メッセージングは、メッセージを消費するレートを 1 秒単位で制限できます。これはスロットルと呼ばれるフロー制御メソッドです。適切な connection-factoryconsumer-max-rate 属性を使用して、指定した速度よりも早くコンシューマーがメッセージを消費しないようにします。

<connection-factory name="MyConnFactory" ... consumer-max-rate="10" />
Copy to Clipboard Toggle word wrap

デフォルト値は -1 で、レート制限フロー制御を無効にします。

consumer-max-rate 属性の読み取りおよび書き込みには、管理 CLI を使用することが推奨されます。以下の例は、InVmConnectionFactory 接続ファクトリーを使用して実行する方法を示しています。これはサーバーと同じ仮想マシンに存在するコンシューマー (たとえば、ローカルの MessageDrivenBean) のデフォルトです。

  • 管理 CLI を使用して consumer-max-rate 属性を読み取る:
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:read-attribute(name=consumer-max-rate)
{
    "outcome" => "success",
    "result" => -1
}
Copy to Clipboard Toggle word wrap
  • 管理 CLI を使用して consumer-max-rate 属性を書き込む:
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:write-attribute(name=consumer-max-rate,value=100)
{"outcome" => "success"}
Copy to Clipboard Toggle word wrap

JMS を使用している場合、インスタンス化された ConnectionFactory の setConsumerMaxRate(int consumerMaxRate) メソッドを使用して最大レートサイズを設定できます。

コア API を使用している場合、速度は ServerLocator.setConsumerMaxRate(int consumerMaxRate) メソッドで設定できます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat