いったんクライアントがブローカに接続されると、メッセージのルーティングと配信を進めることができます。この段階では、メッセージの円滑な流れを確保し、リソースを効率的に使用するために、ブローカがさまざまなタイプの物理的な送信先を作成および管理します。ブローカは、ルーティングと配信に関連するブローカのプロパティーを使用して、アプリケーションのニーズに合った方法でこれらのタスクを管理します。
ブローカ上の物理的な送信先、つまりメッセージコンシューマに配信される前にメッセージが保存されるメモリーの場所の概念についてはすでに説明しました。次の 4 つのタイプの物理的な送信先があります。
管理者作成の送信先は、GUI (imqadmin) または imqcmd ユーティリティーを使用して管理者が作成します。この送信先は、プログラムによって作成される論理的な送信先か、管理者が作成しクライアントによって検索される送信先管理対象オブジェクトのどちらかに対応します。管理者作成の各送信先のプロパティーを設定または更新するには、imqcmd ユーティリティーを使用します。
自動作成の送信先は、メッセージのコンシューマまたはプロデューサが、存在しない送信先にアクセスしようとするたびにブローカによって自動的に作成されます。これらは一般的に開発中に使用されます。このような送信先の作成を許可しないようにブローカのプロパティーを設定できます。特定のブローカ上のすべての自動作成の送信先を設定するには、ブローカのプロパティーを設定します。
自動作成された送信先は、使用されなくなると、ブローカによって自動的に破棄されます。つまり、コンシューマクライアントを保持せず、メッセージを一切含まない状態になった場合です。ブローカの再起動の際、持続メッセージが含まれている場合にだけ、自動作成の送信先が再作成されます。
一時送信先は、メッセージに対する応答を受信するために送信先が必要な場合に、クライアントがプログラムによって明示的に作成および破棄します。名前でわかるように、これらの送信先は一時的であり、送信先が作成されたコネクションの存続期間中にだけ、ブローカによって保持されます。
一時送信先は、持続的には保持されず、ブローカの再起動時に作成し直されることもありません。ただし、管理ツールからは認識できます。
デッドメッセージキューは、ブローカの起動時に自動的に作成される特殊な送信先で、診断用のデッドメッセージを保管するために使用します。デッドメッセージキューのプロパティーを設定するには、imqcmd ユーティリティーを使用します。
送信先を管理するには、imqcmd ユーティリティーを使用します。送信先の管理では、次の 1 つ以上のタスクを実行します。
送信先の作成、一時停止、再開、または破棄。
ブローカ上のすべての送信先の一覧表示。
送信先の状態とプロパティーに関する情報の表示。
送信先のメトリックス情報の表示。
送信先用のメッセージを保持するために使用されるディスクスペースの圧縮。
物理的な送信先のプロパティーの更新。
管理タスクは、管理される送信先のタイプ、つまり管理者作成、自動作成、一時、デッドメッセージキューによって異なります。たとえば、一時送信先は明示的に破棄する必要がありません。また自動作成されるプロパティーは、ブローカの設定プロパティーを使用して設定され、そのブローカ上のすべての自動作成される送信先に適用されます。
最適なパフォーマンスを得るために、物理的な送信先を作成または更新するときにプロパティーを設定することができます。次のようなプロパティーを設定することができます。
送信先のタイプと名前。
送信先の個別の制限および全体の制限 (メッセージの最大数、最大合計バイト数、メッセージあたりの最大バイト数、プロデューサの最大数)。
個別の制限または全体の制限を超えた場合にブローカが実行する処理。
1 回のバッチで配信されるメッセージの最大数。
送信先用のデッドメッセージをデッドメッセージキューに送信するかどうか。
クラスタ化されたブローカで送信先をクラスタ内の他のブローカに複製するかどうか。
また、キュー送信先に対してバックアップコンシューマの最大数を設定したり、クラスタ化されたブローカに対してローカルキューへの送信を優先するかどうかを指定したりできます。
デッドメッセージキューの制限および動作を設定することもできます。ただし、このキューのデフォルトのプロパティーは、標準のキューのプロパティーとは異なっています。
送信先は、送信先が処理するメッセージの数とサイズ、および登録するコンシューマの数と永続性によっては、リソースを著しく消費する可能性があるので、メッセージサービスのパフォーマンスと信頼性を確保するために、送信先を綿密に管理する必要があります。
プロパティーを設定することで、ブローカが受信メッセージのために過負荷状態になったり、ブローカのメモリーが不足したりすることを防ぐことができます。ブローカは、送信先の制限、システム全体の制限、およびシステムメモリーのしきい値という 3 つのメモリー保護レベルを使用して、リソースが少なくなったときにもメッセージサービスの動作を維持します。送信先の制限とシステム全体の制限が適切に設定されている場合、重要なシステムメモリーのしきい値を超えないようにするのが理想的です。
送信先の属性を設定して、送信先ごとにメモリーとメッセージフローを管理することができます。たとえば、送信先で許容されるプロデューサの最大数、送信先で許容されるメッセージの最大数 (または、サイズ)、および任意のメッセージの最大サイズを指定できます。
また、これらの制限に達した場合のブローカの対応方法 (プロデューサの動作を遅くする、もっとも古いメッセージを破棄する、優先度がもっとも低いメッセージを破棄する、最新のメッセージを拒否する) を指定できます。
プロパティーを使用してブローカ上のすべての送信先に適用される制限を設定することもできます。メッセージの総数とすべてのメッセージによって消費される総メモリー量を指定できます。どちらかのシステム全体のメッセージ制限に達した場合、ブローカは新しいメッセージを拒否します。
最後に、プロパティーを使用して、ブローカが段階的に深刻なアクションを実行するしきい値を設定し、メモリーの過負荷を避けるようにすることができます。実行されるアクションは、メモリーリソースの状態によって異なります。green (使用可能なメモリーが十分にある)、yellow (ブローカのメモリーが減っている)、orange (ブローカのメモリーが不十分である)、red (ブローカのメモリーが不足している) といった状態です。ブローカのメモリーの状態が green から red へと進むにつれ、ブローカは次のタイプの深刻なアクションを段階的に実行します。
データストアの持続メッセージのメモリー内コピーを廃棄する。
非持続メッセージのプロデューサを減らし、最終的にブローカへのメッセージのフローを停止する。持続メッセージのフローは、各メッセージがブローカによって通知される要件によって自動的に制限される。