43.5. アンチパターンの回避
- 接続、セッション、コンシューマー、およびプロデューサーを再使用します。最も一般的なメッセージングアンチパターンは、送信された各メッセージ、または消費された各メッセージに対して新しい接続、セッション、またはプロデューサーを作成するユーザーです。これは、リソースの適切でない使い方です。これらのオブジェクトは、作成するのに時間がかかり、複数のネットワークラウンドトリップが関係することがあるため、常に再使用します。
注記
Spring JMS Template などの一部の人気があるライブラリーは、これらのアンチパターンを使用することが知られています。Spring JMS Template を使用する場合、HornetQ ではなくこれが低いパフォーマンスの原因となることがあります。Spring JMS Template は JMS セッション (JCA の使用など) をキャッシュするアプリケーションサーバーでメッセージを送信するために安全に使用できます。これは、アプリケーションサーバーであっても、メッセージの非同期な消費には安全に使用できません。 - 大きいメッセージを回避します。XML などの冗長な形式を使用すると、サーバー伝送負荷が増加し、パフォーマンスが低下します。可能な場合は、メッセージボディーで XML を使用しないでください。
- 各要求に対して一時的なキューを作成しないでください。この一般的なアンチパターンは、一時的なキューの request-response パターンに関係します。一時的なキューの request-response パターンでは、メッセージがターゲットに送信され、返信先ヘッダーがローカルの一時キューのアドレスで設定されます。受信者はメッセージを受信すると、メッセージを処理し、返信先で指定されたアドレスに応答を送り返します。このパターンで行われる一般的な間違いは、送信された各メッセージで新しい一時キューを作成することです。これにより、パフォーマンスは大幅に低下します。代わりに、多くの要求に対して一時キューを再使用する必要があります。
- Message-Driven Bean は不必要に使用しないでください。MDB を使用すると、単純なメッセージコンシューマーと比較して、受信された各メッセージに対するコードパスが大幅に増加します。これは、たくさんの追加のアプリケーションサーバーコードが実行されるためです。MDB を使用する前に、通常のメッセージコンシューマーの使用を調査してタスクを完了してください。