第37章 アンチパターンの回避

  • 可能な場合は、接続、セッション、コンシューマー、プロデューサーを再利用します。

    メッセージングの最も一般的なアンチパターンは、送信または消費されるメッセージごとに新しい接続、セッション、プロデューサーの作成です。これらのオブジェクトは作成に時間がかかり、複数のネットワークラウンドトリップを伴う可能性があるため、リソースの使用率が低くなります。常に再利用します。

    注記

    Spring Messaging Template テンプレートなどの一般的なライブラリーは、これらのアンチパターンを使用します。Spring Messaging Template を使用している場合は、パフォーマンスが低下する可能性があります。Spring Messaging Template は、たとえば JCA を使用して JMS セッションをキャッシュするアプリケーションサーバーでのみ安全に使用でき、その後メッセージを送信するためにのみ使用できます。アプリケーションサーバーであっても、同期的に消費するメッセージに安全に使用することはできません。

  • サイズの大きいメッセージを使用しません。

    XML のような詳細形式は、ネットワーク上の多くのスペースを占有し、結果としてパフォーマンスが低下します。可能な場合は、メッセージ本文では XML を使用しません。

  • 各リクエストに一時キューを作成しません。

    この一般的なアンチパターンには、一時キューの要求/応答パターンが含まれます。一時キュー要求/応答パターンにより、メッセージはターゲットに送信され、返信先ヘッダーはローカルの一時キューのアドレスで設定されます。受信側がメッセージを受信すると、メッセージを処理し、返信先ヘッダーに指定されたアドレスに応答を返します。このパターンでよくある間違いは、送信されるメッセージごとに新しい一時キューを作成することです。これにより、パフォーマンスが大幅に低下します。代わりに、一時キューを多くのリクエストに再利用する必要があります。

  • 必要でない限り、メッセージ駆動 Bean は使用しないでください。

    MDB を使用したメッセージの消費は、単純な JMS メッセージコンシューマーを使用するメッセージの消費よりも遅くなります。