メッセージは、コネクションおよびセッションのコンテキスト内でメッセージコンシューマによって受信されます。クライアントは、メッセージコンシューマオブジェクト (MessageConsumer) を使用して、送信先オブジェクトとして API 内に示される指定された物理的な送信先からメッセージを受信します。
次の 3 つの要因は、ブローカがメッセージをコンシューマに配信する方法に影響します。
コンシュームが同期か非同期か
受信メッセージのフィルタ処理にセレクタを使用するかどうか
メッセージがトピック送信先からコンシュームされる場合、サブスクライバが永続かどうか
メッセージの配信およびクライアント設計に影響するその他の主要な要因は、コンシューマで必要となる信頼性の度合いです。「信頼性の高いメッセージング」を参照してください。
メッセージコンシューマは、同期または非同期のどちらかのメッセージのコンシュームをサポートしています。
同期コンシュームとは、メッセージを配信してコンシュームするよう、コンシューマが明示的に要求することを意味します。
メッセージの要求で使用するメソッドに応じて、同期コンシューマは、メッセージが届くまで無期限に待機するか、指定された時間だけメッセージを待機するか、またはコンシュームされる準備ができているメッセージがない場合にすぐに応答するかを選択できます。「コンシュームされる」とは、オブジェクトがすぐにクライアントで利用できることを意味します。正常に送信されてもブローカが処理を完了していないメッセージは、コンシュームされる準備ができていません。
非同期コンシュームでは、コンシューマとして登録されているメッセージリスナーオブジェクト (MessageListener) にメッセージが自動的に配信されます。セッションスレッドがメッセージリスナーオブジェクトの onMessage() メソッドを呼び出すと、クライアントはメッセージをコンシュームします。
メッセージコンシューマは、メッセージセレクタを使用して、プロパティが特定の選択条件に一致するメッセージだけをメッセージサービスによって配信させることができます。コンシューマを作成するときに、この基準を指定します。
セレクタは SQL に似た構文を使用してメッセージプロパティーを照合します。たとえば次のようになります。
color = ”red’ size > 10
Java クライアントも、キューをブラウズしているときに、セレクタを指定できます。これにより、選択したメッセージのうちコンシュームされるのを待機しているメッセージを確認できます。
セッションオブジェクトを使用して、トピックへの永続サブスクライバを作成できます。ブローカは、このようなサブスクライバに対するメッセージを、このサブスクライバが非アクティブになった場合でも保持します。
ブローカは、サブスクライバの状態を保持し、サブスクライバが再度アクティブになったときにメッセージの配信を再開する必要があるので、サブスクライバの送受信全体から指定されたサブスクライバを識別できる必要があります。サブスクライバの識別情報は、サブスクライバを作成したコネクションの ClientID プロパティーと、サブスクライバを作成するときに指定したサブスクライバ名から構成されています。