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.
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.
Implementieren Sie eine Message-Handler-Methode.
private void onMessage(QAMessage msg) { // Process message. } |
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.
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.
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. } |
Registrieren Sie den Nachrichten-Listener.
my_listener = new MyClass(); mgr->setMessageListener( "queue-name", my_listener ); |
Weitere Hinweise finden Sie unter setMessageListener-Funktion.
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. } } |
Registrieren Sie den Message-Handler.
MyClass listener = new MyClass(); mgr.setMessageListener("queue-name", listener); |
Weitere Hinweise finden Sie unter QAMessageListener-Schnittstelle und setMessageListener-Methode.
Erstellen Sie eine gespeicherte Prozedur mit dem Namen ml_qa_listener_Warteschlange, wobei Warteschlange der Name einer Nachrichtenwarteschlange ist.
Diese Prozedur wird aufgerufen, wenn eine Nachricht in der angegebenen Warteschlange wartet.
Weitere Hinweise finden Sie unter ml_qa_listener_queue.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |