0

Apache.NMS ライブラリを使用して ActiveMQ JMS システムと統合しています。応答キュー リスナーの場合、メッセージの受信後にコンシューマーが破棄されるかどうかは明確ではありません。

ソリューションからの抜粋は次のとおりです。

var destination = getDestination(session, Settings.Instance.OutboundQueue);
// Create a consumer and producer
using (var consumer = session.CreateConsumer(destination))
{
    // Start the connection so that messages will be processed.
    connection.Start();
    consumer.Listener += OnMessage;
    var receiveTimeout = TimeSpan.FromSeconds(Settings.Instance.Timeout);
    // Wait for the message
    semaphore.WaitOne((int)receiveTimeout.TotalMilliseconds, true);
}

// The Listener event
protected void OnMessage(IMessage receivedMsg)
{
    var message = receivedMsg as ITextMessage;
    semaphore.Set();
    // process the message 
}

消費者は耐久性がありますか?

メッセージを受信した後、再登録する必要がありますか?

これは、リスナーをアクティブに保つために while(true) ループが必要な他のキューイング/リスナー実装 (SQL Server サービス ブローカーまたは TCP/IP リスナー) と似ていますか?

4

1 に答える 1

1

これをコーディングした方法のために、using ブロックがコンシューマーを破棄するため、メッセージごとに新しいリスナーを作成する必要があると思います (私の .NET は錆びています)。

コンシューマーがメンバー変数であり、それが保存され、リッスンを停止したいときにのみ閉じられるようにコーディングした場合、この問題は発生しません。using ブロックは、その性質上、管理を依頼したリソースを破棄します。

于 2015-12-21T14:05:33.147 に答える