第8章 大きなメッセージの処理
クライアントは、ブローカーの内部バッファーのサイズを超える大きなメッセージを送信する可能性があり、予期せぬエラーが発生する可能性があります。この状態を回避するには、メッセージが指定の最小値よりも大きい場合にメッセージをファイルとして保存するようにブローカーを設定できます。このように大きなメッセージを処理すると、ブローカーはメモリー内にメッセージを保持しません。代わりに、ディスクまたはブローカーが大きなメッセージファイルを保存するデータベーステーブルのディレクトリーを指定します。
ブローカーがメッセージを大きなメッセージとして保存すると、キューは大きなメッセージディレクトリーまたはデータベーステーブルのファイルへの参照を保持します。
大規模なメッセージ処理は、Core Protocol、AMQP、OpenWire、および STOMP プロトコルで利用できます。
Core Protocol および OpenWire プロトコルの場合、クライアントは接続設定でメッセージの最小サイズを指定します。AMQP および STOMP プロトコルの場合は、ブローカー設定のプロトコルごとに定義されたアクセプターに大きなメッセージの最小サイズを指定します。
大きなメッセージを生成および消費するのに、異なるプロトコルを使用 しない ことが推奨されます。これには、ブローカーはメッセージの複数の変換を実行する必要がある場合があります。たとえば、AMQP プロトコルを使用してメッセージを送信し、OpenWire を使用して受信したいとします。この場合、ブローカーは最初に大きなメッセージのボディー全体を読み取り、Core プロトコルを使用するように変換する必要があります。次に、ブローカーは別の変換を実行し、今回は OpenWire プロトコルへ変換する必要があります。このようなメッセージ変換により、ブローカーに大きな処理のオーバーヘッドが発生します。
前述のプロトコルに指定した最小大きなメッセージサイズは、利用可能なディスク領域やメッセージのサイズなどのシステムリソースの影響を受けます。適切なサイズを決定するために、いくつかの値を使用してパフォーマンステストを実行することが推奨されます。
このセクションの手順では以下の方法を説明します。
- 大きなメッセージを格納するようにブローカーを設定します。
- 大きなメッセージ処理のための AMQP および STOMP プロトコルのアクセプター設定
このセクションでは、大きなメッセージと連携する AMQ Core Protocol および AMQ OpenWire JMS クライアントの設定に関する追加リソースへのリンクも提供します。
8.1. 大きなメッセージ処理のためのブローカーの設定
以下の手順では、ブローカーが大きなメッセージファイルを保存するディスクまたはデータベーステーブルにディレクトリーを指定する方法を説明します。
手順
-
<broker_instance_dir>/etc/broker.xml
設定ファイルを開きます。 ブローカーが大きなメッセージファイルを保存する場所を指定します。
ディスクに大きなメッセージを保存する場合は、
core
要素にlarge-messages-directory
パラメーターを追加し、ファイルシステムの場所を指定します。以下に例を示します。<configuration> <core> ... <large-messages-directory>/path/to/my-large-messages-directory</large-messages-directory> ... </core> </configuration>
注記large-messages-directory
の値を明示的に指定しない場合、ブローカーは<broker_instance_dir> /data/largemessages
のデフォルト値を使用します。大きなメッセージをデータベーステーブルに保存する場合は、
database-store
要素にlarge-message-table
パラメーターを追加して値を指定します。以下に例を示します。<store> <database-store> ... <large-message-table>MY_TABLE</large-message-table> ... </database-store> </store>
注記large-message-table
の値を明示的に指定しない場合、ブローカーはLARGE_MESSAGE_TABLE
のデフォルト値を使用します。
関連情報
- データベースストアの設定に関する詳細は、「データベースのメッセージデータの永続化」 を参照してください。