2016-06-24 9 views
6

Ich bin neu in aktiven MQ. Installiert activemq 5.13.2. Ich verliere alle meine Nachrichten (einschließlich dauerhaftes Thema) nach dem Neustart des ActiveMQ-Servers. Unten finden Sie die Screenshots der Konsole vor und nach dem Neustart des MQ-Servers.ActiveMQ 5.13.2 Nachrichten fehlen nach Neustart

before activeMQ restart

After ActiveMQ restart

Das ist meine activemq.xml Konfiguration:

<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> 


    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <value>file:${activemq.conf}/credentials.properties</value> 
     </property> 
    </bean> 


    <bean id="logQuery" class="io.fabric8.insight.log.log4j.Log4jLogQuery" 
      lazy-init="false" scope="singleton" 
      init-method="start" destroy-method="stop"> 
    </bean> 

    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" persistent="true" useShutdownHook="false"> 

     <destinationPolicy> 
      <policyMap> 
       <policyEntries> 
       <policyEntry topic=">" > 

        <pendingMessageLimitStrategy> 
        <constantPendingMessageLimitStrategy limit="1000"/> 
        </pendingMessageLimitStrategy> 
       </policyEntry> 
       </policyEntries> 
      </policyMap> 
     </destinationPolicy> 



     <managementContext> 
      <managementContext createConnector="false"/> 
     </managementContext> 


     <persistenceAdapter> 
      <kahaDB directory="${activemq.data}/kahadb" journalMaxFileLength="32mb"/> 
     </persistenceAdapter> 




      <systemUsage> 
      <systemUsage> 
       <memoryUsage> 
        <memoryUsage percentOfJvmHeap="70" /> 
       </memoryUsage> 
       <storeUsage> 
        <storeUsage limit="100 gb"/> 
       </storeUsage> 
       <tempUsage> 
        <tempUsage limit="50 gb"/> 
       </tempUsage> 
      </systemUsage> 
     </systemUsage> 


     <transportConnectors> 

      <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
      <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
      <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
      <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
      <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/> 
     </transportConnectors> 

     <destinations> 
       <queue physicalName="testQueue"> 
       </queue> 
       <topic physicalName="testTopic" /> 
     </destinations> 

     <shutdownHooks> 
      <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" /> 
     </shutdownHooks> 


    </broker> 


    <import resource="jetty.xml"/> 

</beans> 
+1

Sind die Nachrichten als persistent markiert? (Siehe http://activemq.apache.org/why-do-i-not-receive-messages-on-my-durable-topic-subscription.html) – mjn

+0

Wie @mjn angibt - Nachrichten sind standardmäßig nicht persistent, wenn gesendet von der Webkonsole. Für Nachrichten, die von einer Anwendung gesendet werden, überprüfen Sie bitte Ihren Code. –

+0

Sind Sie sicher, dass das Verzeichnis $ {activemq.data}/kahadb' aus irgendeinem Grund beim Neustart nicht bereinigt wird? – yegodm

Antwort

1

Das eigentliche Problem scheint die activemq Konsole nach einem Neustart zu sein. Die Nachrichten verschwanden nicht, die Konsole scheint nur etwas falsch zu zeigen.

activemq console screenshot

0

Wenn Sie Nachrichten beharrte über einen Neustart der Hersteller sie als persistent oder der Broker gesetzt hat, wird sie nicht bestehen bleiben. Wenn Sie mit camel routen, müssen die Routen als transacted markiert werden oder sie werden ebenfalls verschwinden. So kann der Broker über dauerhafte Konsumenten informiert werden, aber die Nachrichten werden nicht bestehen, es sei denn, der Produzent (Client) markiert sie als persistent bevor sie gesendet werden.

0
  1. Warteschlangen bestehen Nachrichten auch nach Neustarts.
  2. Dauerhafte Themen bestehen Nachrichten, aber das Problem ist, dass die Konsole diese nicht anzeigt. Ihre dauerhaften Abonnenten erhalten es, sobald Sie das activemq neu starten.