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 的开发提示

为防止在处理已接收的消息及正在确认的消息的过程中中途发生应用程序错误,在 EXPLICIT_ACKNOWLEDGEMENT 模式中使用 QAManagers 会更加安全一些。

如果 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)