クライアントがブローカに接続したら、メッセージのルーティングおよび配信を処理できるようになります。この段階では、ブローカはさまざまな種類の物理的送信先の作成および管理を担当し、メッセージのスムーズなフローを確保し、リソースを効率的に使用します。「ルーティングのプロパティー」で説明するブローカ設定プロパティーを使用して、それぞれのアプリケーションのニーズに合わせて、これらのタスクを管理できます。
ブローカのパフォーマンスと安定性は、使用できるメモリーなどのシステムリソースとリソースの使用効率によって異なります。設定プロパティーを設定して、受信メッセージによるブローカの過負荷やメモリー不足を防止することができます。これらのプロパティーは、リソースが不十分になってもメッセージサービスの動作を維持できるように 3 つのレベルで機能します。
システム全体のメッセージ制限は、システム上のすべての物理的送信先にまとめて適用されます。これらには、ブローカが保持するメッセージの最大数 (imq.system.max_count) やそれらのメッセージが占有する最大合計バイト数 (imq.system.max_size) などがあります。これらのいずれかの制限に達した場合、ブローカは、保留メッセージが制限以下になるまで、新しいメッセージを拒否します。各メッセージの最大サイズ (imq.message.max_size) や期限切れメッセージの再利用の間隔 (imq.message.expiration.interval) にも制限があります。
個々の送信先の制限は特定の物理的送信先へのメッセージを制限します。これらの制限を制御する設定プロパティーについては、第 15 章「物理的送信先のプロパティーのリファレンス」で説明しています。たとえば、送信先で保持するメッセージの数とサイズ、作成可能なメッセージのプロデューサとコンシューマの数、送信先にバッチ配信できるメッセージの数の制限などがあります。
送信先は、メッセージプロデューサによるメッセージの配信速度を遅くするか、新しい受信メッセージを拒否するか、もっとも古いか優先度がもっとも低い既存のメッセージを破棄するかによって、メモリー制限に対処するように設定できます。この方法で送信先から削除されるメッセージは、完全に削除するのではなく、オプションでデッドメッセージキューに移動できます。ブローカプロパティー imq.destination.DMQ.truncateBody が、デッドメッセージキューにメッセージ本文全体を保存するのか、ヘッダーとプロパティーデータのみを保存するのかを制御します。
アプリケーションの開発とテスト時の利便性のため、メッセージプロデューサまたはコンシューマが存在しない送信先にアクセスしようとした場合に、新しい物理的送信先を自動的に作成するように、メッセージブローカを設定できます。表 14–3 にまとめられているブローカプロパティーは、ここで説明したプロパティーとほとんど同じですが、管理者によって作成される送信先ではなく、自動的に作成される送信先に適用されます。
システムメモリーのしきい値は、ブローカがメモリーの過負荷を防ぐために段階的に重大なアクションをとるメモリー使用率のレベルを定義します。それらの利用率のレベルが 4 つ定義されています。
Green: 使用可能なメモリーが十分にあります。
Yellow: ブローカメモリーが不足し始めています。
Orange: ブローカのメモリーが不十分です。
Red: ブローカのメモリーが不足しています。
これらのレベルを定義するメモリー利用率は、ブローカプロパティー imq.green.threshold、imq.yellow.threshold、imq.orange.threshold、および imq.red.threshold でそれぞれ指定します。green のデフォルト値は 0%、yellow のデフォルト値は 80%、orange のデフォルト値は 90%、red のデフォルト値は 98% です。
メモリー利用率が次のレベルに進むと、ブローカは漸進的に対応します。まず、メッセージをアクティブなメモリーから持続ストレージにスワップし、次に、持続的でないメッセージのプロデューサの処理速度を低下させ、最終的にブローカへのメッセージフローを止めます。これらのアクションはどちらもブローカのパフォーマンスを低下させます。メッセージの生成を徐々に減らすには、配信される各バッチのサイズを、プロパティー imq.resourceState .count によって指定されたメッセージ数に制限します。ここで、resourceState はそれぞれ green、yellow、orange、または red です。
こうしたシステムメモリーのしきい値がトリガーされることは、システム全体および送信先のメッセージ制限の設定が高すぎることを示しています。メモリーしきい値によって、潜在するメモリーの過負荷を必ずしもタイミングよく検出できるとは限らないため、メモリー利用率を制御するためにそれらに依存することは避け、メモリーリソースを最大限に活用できるように、システム全体および送信先の制限を再設定する必要があります。