Frage

Ich habe einen Windows-Dienst mit den Apache.NMS und Apcahe.NMS.ActiveMQ (Version 1.0) Bibliotheken geschrieben. Der Dienst verbraucht Nachrichten von ActiveMQ von einem Anbieter-Server.

Der Service dreht sich um eine Verbindung und wartet auf Nachrichten (I Griff die OnMessage Ereignis)

Die Verbindung ist eine Verbindung abgewickelt, damit ich nach jeder Nachricht begehen nennen.

Wenn der Dienst gestartet wird, alles funktioniert sehr gut, und zwar für eine Weile. Doch nachdem er eine Zeit lang gelaufen ist, wird es keine Nachrichten mehr verbrauchen. Auch wenn setze ich den Dienst. Es dauert in der Regel einen Neustart meines Dienstes und dem Anbieter-Server (Tomcat) Dinge wieder in Gang zu bringen. Der Verkäufer besteht darauf, dass nichts auf ihrer Seite falsch ist.

Es werden keine Ausnahmen auf beiden Seiten (Client oder Server) geworfen - es ist nur 'stecken'

.

Sollte halte ich Spring.Messaging.Nms mit?

War es hilfreich?

Lösung

Ich habe das Problem entdeckt. Nach dem Aufbau der Verbindung und die Nachricht Hörer ging der Dienst in eine Schleife mit Thread.Sleep (500). Dumm. Ich Refactoring den Service alles in OnStart zu starten und entsorgen Sie es in OnStop.

Da das zu tun, alles läuft perfekt.

Classic ID-10-T Fehler auftreten, zwischen Tastatur und Stuhl.

Andere Tipps

Mein Code ist ein wenig anders. Statt Polling in einer Schleife richtete ich einen Zuhörer auf, die zu einem „OnMessage“ Ereignisse reagiert. Mein Code ähnelt dem Code unten. Meine eigentliche Code hat viele irrelevante Sachen drin, aber der Geist ist der gleiche -. Hoffe, das hilft

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.;
}

Wir haben gerade stoßen genau das gleiche Problem mit einem Net Service ActiveMQ sprechen, aber unsere sperrt nach nur etwa 10-20 Nachrichten übermittelt werden.

Haben Sie versucht es mit und ohne Feder Rahmen und es ist etwas besser, ohne (es sei denn, ich stelle mir vor, Dinge).

Möchten Sie über diesen Code etwas ausmachen, Überprüfung und lassen Sie mich wissen, wenn es irgendeine Ähnlichkeit mit Ihrem eigenen trägt?

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top