10.2. プロデューサーフロー制御
コンシューマーウィンドウベースのフロー制御と同様に、AMQ Broker はプロデューサーからブローカーに送信されるデータ量をブローカーに制限し、ブローカーが大量のデータで過負荷にならないようにすることができます。プロデューサーの場合、ウィンドウサイズは 1 度にインフライトにできるバイト数を決定します。
10.2.1. プロデューサーウィンドウサイズの設定
ウィンドウサイズは、クレジットに基づいてブローカーとプロデューサーの間でネゴシエートされます。これは、ウィンドウの各バイトに 1 つのクレジットです。メッセージが送信されてクレジットが使用されると、プロデューサーは追加のメッセージを送信する前に、ブローカーからクレジットを要求し、付与する必要があります。プロデューサーとブローカー間のクレジットの交換により、プロデューサーとブローカー間のデータフローが分離されます。
ウィンドウサイズの設定
以下の例は、Core JMS クライアントを使用する場合にプロデューサーウインドウサイズを 1024
バイトに設定する方法を示しています。
手順
プロデューサーウィンドウサイズを設定します。
Core JMS Client が JNDI を使用して接続ファクトリーをインスタンス化する場合は、接続文字列 URL の一部として
producerWindowSize
パラメーターを含めます。JNDI コンテキスト環境内に URL を保存します。以下の例では、jndi.properties
ファイルを使用して URL を保存します。java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory java.naming.provider.url=tcp://localhost:61616?producerWindowSize=1024
Core JMS クライアントが JNDI を使用して接続ファクトリーをインスタンス化しない場合は、値を
ActiveMQConnectionFactory.setProducerWindowSize()
に渡します。ConnectionFactory cf = ActiveMQJMSClient.createConnectionFactory(...) cf.setProducerWindowSize(1024);