2017-09-12 1 views
0

Ich fange an und habe ein Problem mit ActiveMQ festgestellt. Ich bin mit lokaler ActiveMQ ohne Anpassungen, ich einfachWarum wird ActiveMQ Consumer 10 Sekunden lang als verbunden angesehen, nachdem er beendet wurde?

@Component 
public class VirtualTopicSender { 

    @Autowired 
    private JmsTemplate jmsTemplate; 

    public void send() { 
     Topic topic = new ActiveMQTopic("VirtualTopic.TEST-VIRTUAL-TOPIC"); 
     int i = 0; 

     while(true) { 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      jmsTemplate.convertAndSend(topic, i++); 
     } 
    } 

} 

und auch einfachen Empfänger Verlag App

@Component 
public class VirtualTopicReceiver { 

    @JmsListener(destination="Consumer.myConsumer0.VirtualTopic.TEST-VIRTUAL-TOPIC", containerFactory = "defaultMessageListenerContainerFactory") 
    public void receiveMessages(Session session, String message) { 
     System.out.println(message); 
     try { 
      session.commit(); 
     } catch (JMSException e) { 
      e.printStackTrace(); 
     } 
     try { 
      System.out.println(session.getTransacted()); 
     } catch (JMSException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

beide sind springboot die geschrieben habe.

Was ich tue, ist:

  • Start Empfänger App im Terminal
  • Ausgangs Verlag App im Terminal
  • eine Ausgabe vom Empfänger zu sehen und zu töten sie mit Strg + c
  • Empfänger wieder starten

jetzt fehlt mir die Ausgabe von 10 Sekunden, auch Netstat zeigt für 10 Sekunden, dass connecti on ist

$ netstat -an | grep 575* | grep 61616 
    TCP 127.0.0.1:57809  127.0.0.1:61616  ESTABLISHED 
    TCP 127.0.0.1:61616  127.0.0.1:57788  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57789  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57790  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57791  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57792  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57793  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57794  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57795  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57796  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57797  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57798  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57799  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57800  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57801  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57802  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57803  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57804  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57805  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57806  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57808  TIME_WAIT 
    TCP 127.0.0.1:61616  127.0.0.1:57809  ESTABLISHED 

Wissen Sie, wie Sie diese 10 Sekunden Verzögerung loswerden? Wenn ich eine Anwendung mit mehreren Instanzen von Empfängern machen werde, kann ich nicht riskieren, Nachrichten für 10 Sekunden zu verlieren, bevor ActiveMQ die Instanzen wechselt, aber im Moment habe ich keine Ahnung, wie ich das beheben kann.

Jede Hilfe wird geschätzt.

Antwort

0

Okay, jetzt ist alles klar. Gestern habe ich den ganzen Tag damit verbracht, Dokumentation zu lesen und zu versuchen, dieses Verhalten zu verstehen, aber heute habe ich beschlossen, dafür zu sorgen, dass der Verbraucher wirklich stirbt, wenn man Strg + C drückt - naja, tut es nicht.

Ich habe einfache Restendpunkt in einer anderen Anwendung, die mein Empfänger anruft erstellt und nach ctrl + c-Empfänger macht noch Ruheaufrufe für 10 Sekunden.

Präsentiert in Frage Verhalten ist in git Bash vorhanden.

Verwandte Themen