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

SQL Anywhere 11.0.1 (Deutsch) » QAnywhere » QAnywhere-Clientanwendungen schreiben » QAnywhere-Nachrichten empfangen

 

Nachrichten asynchron empfangen

Um Nachrichten mit den .NET-, C++- und Java-APIs asynchron zu empfangen, müssen Sie eine Nachrichten-Listener-Funktion schreiben und registrieren, die von QAnywhere aufgerufen wird, wenn sich eine Nachricht in der Warteschlange befindet. Der Nachrichten-Listener übernimmt die eintreffenden Nachrichten als Parameter. Die Aufgabe, die Ihr Nachrichten-Listener durchführt, hängt von Ihrer Anwendung ab. In der TestMessage-Beispielanwendung fügt der Nachrichten-Listener zum Beispiel die Nachricht der Nachrichtenliste im TestMessage-Hauptfenster hinzu.

Tipp für die Entwicklung in .NET, C++ und Java

Aus Zuverlässigkeitsgründen empfiehlt es sich, die QAManager-Objekte im Modus EXPLICIT_ACKNOWLEDGEMENT zu benutzen, damit die Möglichkeit ausgeschlossen wird, dass ein Anwendungsfehler irgendwann während der Verarbeitung der empfangenen Nachrichten auftritt und die Nachricht dennoch bestätigt wird.

Wenn das QAManager-Objekt im Modus EXPLICIT_ACKNOWLEDGEMENT geöffnet wird, kann die Nachricht in der onMessage-Methode nur bestätigt werden, nachdem sie erfolgreich verarbeitet wurde. Wenn daher bei der Verarbeitung der Nachricht ein Fehler aufgetreten ist, wird die Nachricht nochmals empfangen, da sie nicht bestätigt wurde.

Wenn das QAManager-Objekt im Modus IMPLICIT_ACKNOWLEDGEMENT geöffnet wird, erfolgt die Bestätigung der an die onMessage-Methode übergebenen Nachricht implizit, wenn onMessage zurückkehrt. Wenn bei der Verarbeitung der Nachricht in der Anwendung ein Fehler auftritt, wird die Nachricht bestätigt und nicht mehr neu empfangen.

♦  So empfangen Sie Nachrichten asynchron (.NET)
  1. Implementieren Sie eine Message-Handler-Methode.

    private void onMessage(QAMessage msg) {
        // Process message.
    }
  2. Registrieren Sie den Message-Handler.

    Um einen Message-Handler zu registrieren, erstellen Sie ein QAManager.MessageListener-Objekt, das die Message-Handler-Funktion als Argument hat. Dann verwenden Sie die QAManager.SetMessageListener-Funktion, um den MessageListener für eine bestimmte Warteschlange zu registrieren. Im folgenden Beispiel gilt: queue-name ist eine Zeichenfolge und der Name der Warteschlange, die vom QAManager-Objekt geprüft wird.

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

    Weitere Hinweise finden Sie unter MessageListener-Delegat und SetMessageListener-Methode.

♦  So empfangen Sie Nachrichten asynchron (C++)
  1. Erstellen Sie eine Klasse, die die QAMessageListener-Schnittstelle implementiert.

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

    Weitere Hinweise finden Sie unter QAMessageListener-Klasse.

  2. Implementieren Sie die onMessage-Methode.

    Die QAMessageListener-Schnittstelle enthält eine Methode: onMessage. Wenn eine Nachricht in der Warteschlange eintrifft, ruft die QAnywhere-Bibliothek diese Methode auf, indem die neue Nachricht als einziges Argument weitergegeben wird.

    void MyClass::onMessage(QAMessage * msg) {
         // Process message.
    }
  3. Registrieren Sie den Nachrichten-Listener.

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

    Weitere Hinweise finden Sie unter setMessageListener-Funktion.

♦  So wird eine Nachricht asynchron empfangen (Java)
  1. Implementieren Sie eine Message-Handler-Methode und eine Exception Handler-Methode.

    class MyClass implements QAMessageListener {
      public void onMessage(QAMessage message) {
        // Process the message.
      }
      public void onException(
        QAException exception, QAMessage message) {
        // Handle the exception.
      }
    }
  2. Registrieren Sie den Message-Handler.

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

Weitere Hinweise finden Sie unter QAMessageListener-Schnittstelle und setMessageListener-Methode.

♦  So empfangen Sie Nachrichten asynchron (SQL)