2017-06-26 2 views
0

Ich verwende derzeit Apache ActiveMQ als JMS-Lösung, um verschiedene Nachrichten zwischen Clients zu senden. Ich möchte die Verfügbarkeit für bestimmte Kunden (d. H. Verbraucher oder Hersteller) überprüfen, aber ich habe bisher noch keinen Weg gefunden, dies zu tun. Ich habe die Advisory-Nachrichten und StatisticsPlugin für irgendwelche Informationen darüber, wie dies zu tun ist, aber nichts hilfreich gefunden.ActiveMQ (Java) - Überprüfung der Zeit, die eine Verbindung aktiv war (z. B. Verbraucher oder Hersteller)

Ich könnte versuchen, eine Uhr in meine Consumer- und Producer-Klassen einzubetten und ein spezielles Advisory-Ziel für das Senden von Nachrichten zu erstellen, um die Zeit aus diesen Klassen abzurufen; Dies scheint jedoch unpraktisch.

Kennt jemand eine bessere Lösung oder eine Möglichkeit, dies in ActiveMQ zu tun?

Antwort

0

Warum Beratung ist nicht die Lösung? Sie können es wie folgt verwenden, indem Sie Nachrichten vom Thema ActiveMQ.Advisory.Connection zu einer Warteschlange leiten, um sie zu verarbeiten, wann Sie möchten, und die Betriebszeit zu berechnen.

dieses Snippet zu Ihrem activemq.xml hinzufügen

... 
    </broker> 

    <!-- configure the camel activemq component to use the current broker --> 

    <bean id="ActiveMQVMConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
     <property name="brokerURL" value="vm://localhost?create=false&amp;waitForStart=10000"/> 
     <property name="userName" value="${activemq.username}"/> 
     <property name="password" value="${activemq.password}"/> 
    </bean> 
    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" > 
     <property name="connectionFactory" ref="ActiveMQVMConnectionFactory"/> 
    </bean> 

    <camelContext id="camel" trace="false" xmlns="http://camel.apache.org/schema/spring"> 
     <route> 
      <from uri="activemq:topic:ActiveMQ.Advisory.Connection" /> 
      <to uri="activemq:queue:Advisory"/> 
     </route> 
    </camelContext> 
+0

Nachrichten an eine Warteschlange aus dem Beratungs Thema Senden ist nicht das Problem, das ich bin, es ist in der Lage, die Laufzeit zu erhalten. Wie würde ich das tun? Gibt es irgendeine Funktion, die ich verpasst habe, oder sollte ich eine andere verwenden? Edit: Ich sollte auch erwähnen, dass ich nicht XML, nur Java verwende. –

+0

Jedes Mal, wenn eine Verbindung gestartet oder beendet wird, wird eine Nachricht an das Thema ActiveMQ.Advisory.Connection mit Informationen gesendet. Da es sich um ein Thema handelt, wenn Ihr Client, der die Betriebszeit berechnet, nicht verbunden ist, wird er die Nachrichten verlieren, und dazu habe ich Ihnen vorgeschlagen, sie in eine Warteschlange zu senden, um sie später zu behandeln. Wenn Sie also den Unterschied zwischen der Zeit der Startmeldung und der Stoppnachricht berechnen, haben Sie die Betriebszeit nicht? Sie verwenden ein eingebettetes ActiveMQ? Sie können die Camel-Route programmgesteuert erstellen oder einen Java-Listener einbetten –

+0

Das ist eine gute Idee, aber das Problem damit ist, ich möchte die Betriebszeit berechnen, auch wenn mein "Advisory" Programm offline ist. Benutzer können sich verbinden und Nachrichten senden. Irgendwann später kann ich die Verbindungs-Uptime überprüfen, ohne das Programm offen zu lassen, um die erste Verbindungsinformationsnachricht zu empfangen. Ich denke aber, dass ich bei der Idee der Uhr bleiben werde, da ich herausgefunden habe, wie man es richtig arbeiten lässt und keine zusätzlichen Verbindungen aufbauen muss, um Advisory-Nachrichten zu verwalten oder welche Themen oder Warteschlangen die Verbraucher und Produzenten bereits abonniert haben. –

Verwandte Themen