Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » QAnywhere » QAnywhere クライアント・アプリケーションの作成 » QAnywhere メッセージの受信

 

非同期的なメッセージ受信

.NET、C++、Java の API を使用して、非同期的にメッセージを受信するには、メッセージ・リスナ関数を作成して登録します。メッセージがキューに登録されると、このメッセージ・リスナ関数が QAnywhere によって呼び出されます。メッセージ・リスナは、着信メッセージを引数とします。メッセージ・リスナ内で実行する処理は、アプリケーションによって異なります。たとえば、TestMessage サンプル・アプリケーションのメッセージ・リスナは、TestMessage のメイン・ウィンドウのメッセージ・リストに着信メッセージを追加します。

.NET、C++、Java での開発のヒント

受信メッセージの処理過程、メッセージの受信確認中に発生する可能性のあるアプリケーション・エラーを防ぐために、QAManager を EXPLICIT_ACKNOWLEDGEMENT モードで使用することをおすすめします。

QAManager が EXPLICIT_ACKNOWLEDGEMENT モードでオープンされている場合、メッセージは正常に処理された後でのみ onMessage メソッドで受信確認されます。この方法では、メッセージの処理中にエラーが発生した場合は受信確認が行われないため、メッセージを再受信できます。

QAManager が IMPLICIT_ACKNOWLEDGEMENT モードでオープンされている場合、onMessage に渡されたメッセージは、onMessage がメッセージを戻すときに暗黙的に受信確認されます。このため、メッセージの処理中にユーザ・アプリケーションでエラーが発生した場合でも受信確認が行われるため、メッセージは再受信できせん。

♦  非同期的にメッセージを受信するには、次の手順に従います (.NET の場合)。
  1. メッセージ・ハンドラ・メソッドを実装します。

    private void onMessage(QAMessage msg) {
        // Process message.
    }
  2. メッセージ・ハンドラを登録します。

    メッセージ・ハンドラを登録するには、メッセージ・ハンドラを引数として指定して QAManager.MessageListener オブジェクトを作成します。次に、QAManager.SetMessageListener 関数を使用して、MessageListener を特定のキューに登録します。次の例では、queue-name は QAManager オブジェクトが受信するキューの名前を示す文字列です。

    MessageListener listener;
    listener = new MessageListener( onMessage );
    mgr.SetMessageListener( "queue-name", listener );

    MessageListener デリゲートSetMessageListener メソッドを参照してください。

♦  非同期的にメッセージを受信するには、次の手順に従います (C++ の場合)。
  1. QAMessageListener インタフェースを実装するクラスを作成します。

    class MyClass: public QAMessageListener {
       public:
       void onMessage( QAMessage * Msg);
    };

    QAMessageListener クラスを参照してください。

  2. onMessage メソッドを実装します。

    QAMessageListener インタフェースには onMessage という名前のメソッドがあります。キューにメッセージが着信するたびに、QAnywhere ライブラリはこのメソッドを呼び出します。そのとき、着信メッセージが唯一の引数として渡されます。

    void MyClass::onMessage(QAMessage * msg) {
         // Process message.
    }
  3. メッセージ・リスナを登録します。

    my_listener = new MyClass();
    mgr->setMessageListener( "queue-name", my_listener );

    setMessageListener 関数を参照してください。

♦  非同期的にメッセージを受信するには、次の手順に従います (Java の場合)。
  1. メッセージ・ハンドラ・メソッドと例外ハンドラ・メソッドを実装します。

    class MyClass implements QAMessageListener {
      public void onMessage(QAMessage message) {
        // Process the message.
      }
      public void onException(
        QAException exception, QAMessage message) {
        // Handle the exception.
      }
    }
  2. メッセージ・ハンドラを登録します。

    MyClass listener = new MyClass();
    mgr.setMessageListener("queue-name", listener);

QAMessageListener インタフェースsetMessageListener メソッドを参照してください。

♦  非同期的にメッセージを受信するには、次の手順に従います (SQL の場合)。