1

Apache.NMSおよびApcahe.NMS.ActiveMQ(バージョン1.0)ライブラリを使用してWindowsサービスを作成しました。このサービスは、ベンダーサーバーからのActiveMQからのメッセージを消費します。

サービスは接続を起動し、メッセージをリッスンします(OnMessageイベントを処理します)

接続はトランザクション接続であるため、各メッセージの後にcommitを呼び出します。

サービスが開始されると、すべてが非常にうまく機能し、しばらくの間機能します。ただし、しばらく実行すると、メッセージは消費されなくなります。サービスをリセットしても。通常、サービスとベンダーサーバー(tomcat)を再起動すると、問題が解決します。ベンダーは、彼らの側には何も悪いことはないと主張しています。

どちらの側(クライアントまたはサーバー)でも例外はスローされません-それは単に「スタック」しています。

Spring.Messaging.Nmsの使用を検討する必要がありますか?

4

4 に答える 4

3

私は問題を発見しました。接続とメッセージ リスナーを確立した後、サービスは Thread.Sleep(500) でループに陥りました。バカ。OnStart ですべてを開始し、OnStop で破棄するようにサービスをリファクタリングしました。

それ以来、すべてが完璧に実行されています。

キーボードと椅子の間で発生する従来の ID-10-T エラー。

于 2008-11-14T17:15:20.030 に答える
1

私のコードは少し異なります。ループでポーリングする代わりに、「OnMessage」イベントに応答するリスナーを設定しました。私のコードは以下のコードに似ています。私の実際のコードには無関係なものがたくさんありますが、精神は同じです - これが役に立てば幸いです。

factory = new Apache.NMS.ActiveMQ.ConnectionFactory("tcp://activemq:61616");

connection = factory.QueueConnection(factory, "MyQueue", AcknowledgementMode.AutoAcknowledge)

consumer = connection.Session.CreateConsumer(connection.Queue, "2 > 1"); //Get every msg

consumer.Listener += new MessageListener(OnMessage);


private void OnMessage(IMessage message)
{
  //Process message here.;
}
于 2008-11-19T22:54:42.837 に答える
1

気にしないでください、私はここでそれを見つけました:

ActiveMQ および NMS によるトランザクション メッセージ処理

于 2008-11-20T13:30:12.447 に答える
0

ActiveMQと通信する.Netサービスを使用してまったく同じ問題が発生しましたが、約10〜20個のメッセージが配信された後にロックアップします。

Spring Frameworkを使用した場合と使用しない場合で試してみましたが、(想像していない限り)使用しない方が少し良いです。

このコードをチェックして、自分のコードと似ているかどうか教えていただけませんか。

ConnectionFactory connectionFactory = new ConnectionFactory("tcp://activemq:61616");

Connection connection = (Connection)connectionFactory.CreateConnection();
connection.Start();

Session session = (Session)connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
IDestination queue = session.GetQueue("test.queue");

MessageConsumer consumer = (MessageConsumer)session.CreateConsumer(queue);

for (int i = 0; i < 1000; i++)
{
    IMessage msg = consumer.Receive();
    if (msg != null)
        Console.WriteLine((msg as ITextMessage).Text);
}
于 2008-11-19T17:37:16.317 に答える