WebSphere Message Service Clients for C/C++ and .NET, Version 1.2 作業系統: Linux, Windows

.NET 中使用訊息和異常狀況接聽器

.NET 應用程式會使用訊息接聽器以非同步接收訊息, 以及使用異常狀況接聽器以非同步獲知有問題的連線。

訊息和異常狀況接聽器在 .NET 中的功能, 和其在 C++ 中的完全相同。不過,仍有些許的實作差異。

.NET 中使用訊息接聽器

若要非同步接收訊息,您必須:

  1. 定義一種符合訊息接聽器委派簽章的方法。您所定義的方法可以是靜態或實例方法, 且可定義在任何可存取的類別中。委派簽章如下:
    public delegate void MessageListener(IMessage msg); 

    因此,您可將方法定義成:

    void SomeMethodName(IMessage msg);
  2. 使用類似如下的方式,以委派方式來建立此方法的實例:
    MessageListener OnMsgMethod = new MessageListener(SomeMethodName)
  3. 向一或多個消費者登錄委派,方法是按如下所示,將它設定成消費者的 MessageListener 內容:
    consumer.MessageListener = OnMsgMethod;

    將 MessageListener 設回空值,以移除委派:

    consumer.MessageListener = null;

在 .NET 中使用異常狀況接聽器

異常狀況接聽器的運作方式和訊息接聽器相同, 只是其委派定義不同,並且是指派給連線而非訊息使用端。這和 C++ 相同。

  1. 定義方法。委派簽章如下:
    public delegate void ExceptionListener(Exception ex);  

    因此, 所定義的方法可以是:

    void SomeMethodName(Exception ex);
  2. 使用類似如下的方式,以委派方式來建立此方法的實例:
    ExceptionListener OnExMethod = new ExceptionListener(SomeMethodName)
  3. 向連線登錄委派,方法是設定其 ExceptionListener 內容:
    connection.ExceptionListener = OnExMethod ;  

    移除委派,方法是將 ExceptionListener 設回:

    null:  connection.ExceptionListener = null;

您不必刪除異常狀況或訊息,因為當已無它們的參照時, 記憶體回收器自會如此做。

以下是使用上述的範例程式碼:

using System;
using System.Threading;
using IBM.XMS;

public class Sample {  
public static void Main()
    {
        XMSFactoryFactory factoryFactory = XMSFactoryFactory.GetInstance(XMSC.CT_RTT);

        IConnectionFactory connectionFactory = factoryFactory.CreateConnectionFactory();
        connectionFactory.SetStringProperty(XMSC.RTT_HOST_NAME, "localhost");
        connectionFactory.SetStringProperty(XMSC.RTT_PORT, "1506");

        //
        // 建立連線並登錄異常狀況接聽器
        //

        IConnection connection = connectionFactory.CreateConnection();
        connection.ExceptionListener = new ExceptionListener(Sample.OnException);

        ISession session = connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
        IDestination topic = session.CreateTopic("topic://xms/sample");

        //
        // 建立消費者並登錄非同步訊息接聽器
        //

        IMessageConsumer consumer = session.CreateConsumer(topic);
        consumer.MessageListener = new MessageListener(Sample.OnMessage);

        connection.Start();

        while (true)
        {
            Console.WriteLine("Waiting for messages....");
            Thread.Sleep(1000);
        }
    }

    static void OnMessage(IMessage msg)
    {
        Console.WriteLine(msg);
    }

    static void OnException(Exception ex)
    {
        Console.WriteLine(ex);
    }
}

Concept topic

使用條款 | 評比此網頁

時間戳記前次更新: 25 Apr 2006
(C) Copyright IBM Corporation 2005. All Rights Reserved.
本資訊中心採用 Eclipse 技術。(http://www.eclipse.org)