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. 代行を 1 つ以上のコンシューマーに登録するため、コンシューマーの 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");
//
// Create the connection and register an exception listener
//
IConnection connection = connectionFactory.CreateConnection();
connection.ExceptionListener = new ExceptionListener(Sample.OnException);
ISession session = connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge);
IDestination topic = session.CreateTopic("topic://xms/sample");
//
// Create the consumer and register an async message listener
//
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

ご利用条件 | フィードバック (英語のみ)

Timestamp icon最終更新: 8 Jun 2006
(C) Copyright IBM Corporation 2005, 2006. All Rights Reserved.
このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)