メッセージの送達
XMS は、メッセージ配信の永続モードと非永続モード、およびメッセージの非同期配信と同期配信をサポートします。
メッセージ送達モード
- 永続
- 永続メッセージは、1 回送信されます。 メッセージング・サーバーは、メッセージのロギングなどの特殊な予防措置を取り、障害が発生した場合にも転送中に永続メッセージを失わないようにしています。
- 非持続
- 非永続メッセージが送信されるのは 1 回以内です。 非永続メッセージは、障害が発生した場合、転送中に失われる可能性があるため、永続メッセージより信頼性は低くなります。
送達モードの選択は、信頼性とパフォーマンスとのトレードオフになります。 非永続メッセージは、通常、永続メッセージより転送速度が高速になります。
非同期メッセージ配信
XMS は、1 つのスレッドを使用して、セッションのすべての非同期メッセージ配信を処理します。 このことは、一度に実行できるのは 1 つのメッセージ・リスナー関数または 1 つの onMessage() メソッドのみであるという意味です。
あるセッションで複数のメッセージ・コンシューマーが複数のメッセージを非同期で受信しており、メッセージ・リスナー関数または onMessage() メソッドが 1 つのメッセージを 1 つのメッセージ・コンシューマーに配信している場合、同じメッセージを待っている他のメッセージ・コンシューマーは引き続き待機する必要があります。 セッションへの配信を待機中のその他のメッセージも、引き続き待機する必要があります。
アプリケーションがメッセージの並行配信を必要とする場合は、 XMS が非同期メッセージ配信を処理するために複数のスレッドを使用するように、複数のセッションを作成します。 このようにして、複数のメッセージ・リスナー関数または onMessage() メソッドを並行して実行できます。
コンシューマーにメッセージ・リスナーを割り当てても、セッションは非同期にはなりません。 セッションが非同期になるのは、Connection.Start メソッドが呼び出されたときだけです。 Connection.Start メソッドが呼び出されるまでは、すべての同期呼び出しが可能です。 Connection.Start が呼び出されると、コンシューマーへのメッセージ配信が開始されます。
コンシューマーやプロデューサーの作成などの同期呼び出しを非同期セッションで行う必要がある場合は、Connection.Stop を呼び出す必要があります。 Connection.Start メソッドを呼び出してメッセージの配信を開始することにより、セッションを再開できます。 この唯一の例外が、メッセージをコールバック関数に配信するセッション・メッセージ配信スレッドです。 このスレッドは、セッションのメッセージ・コールバック関数でどのような呼び出しでも (クローズ呼び出しを除く) 行えます。
MessageListener メソッドの外部でセッションを作成して処理します。同期メッセージ配信
アプリケーションが MessageConsumer オブジェクトの Receive メソッドを使用している場合は、メッセージをアプリケーションに同期した状態で配信します。
Receive メソッドを使用すると、アプリケーションはメッセージを指定の期間または無期限に待機できます。 あるいは、アプリケーションにメッセージを待機させない場合は、Receive with No Wait メソッドを使用できます。