2014-12-18 9 views
5

Ich habe eine Spring-Webanwendung, die auf einem eigenständigen ActiveMQ senden und hören wird. Wenn ich die Web-Anwendung zu starten, es zeigt:Startfehler von Embedded ActiveMQ: Temporäre Speichergrenze ist 51200 MB

20:12:52.684 [localhost-startStop-1] ERROR o.a.activemq.broker.BrokerService - Temporary Store limit is 51200 mb, whilst the temporary data directory: /root/activemq-data/localhost/tmp_storage only has 29021 mb of usable space 

ich gegoogelt und viele Artikel lesen, sie alle konfigurieren Broker und systemusage beziehen sich die temporäre Speichergröße zu begrenzen. Allerdings mache ich das nicht in Spring-Konfiguration. Unten ist meine Konfigurations-XML.

<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="${jms.broker_url}" /> 
</bean> 
<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="connectionFactory" /> 
    <property name="sessionCacheSize" value="10" /> 
</bean> 

<bean id="recvQueue" class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg value="q.recv" /> 
</bean> 
<bean id="sendQueue" class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg value="q.send" /> 
</bean> 
<bean id="notifyQueue" class="org.apache.activemq.command.ActiveMQQueue"> 
    <constructor-arg value="q.notify" /> 
</bean> 

<!-- Spring JMS Template --> 
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="cachingConnectionFactory" /> 
</bean> 
<bean id="batchImplMessageProducer" class="com.seebon.spfcore.repository.jms.BatchImplMessageProducer"> 
    <property name="jmsTemplate" ref="jmsTemplate" /> 
    <property name="sendQueue" ref="sendQueue" /> 
    <property name="recvQueue" ref="recvQueue" /> 
    <property name="notifyQueue" ref="sendQueue" /> 

</bean> 

<bean id="advancedQueueContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="destination" ref="recvQueue" /> 
    <property name="messageListener" ref="recvBatchImplMessageListener" /> 

    <property name="concurrentConsumers" value="5" /> 
    <property name="maxConcurrentConsumers" value="10" /> 
</bean> 


<bean id="recvBatchImplMessageListener" class="com.seebon.spfcore.repository.jms.RecvBatchImpMessageListener" /> 

Bitte helfen Sie mir hier raus, DANKE!

Antwort

7

In Ihrem activeMQ.xml Sie einige Konfiguration wie hätten diesen

<systemUsage> 
    <systemUsage> 
     .... 
     <tempUsage> 
     <tempUsage limit="50 gb"/> 
     </tempUsage> 
    </systemUsage> 
</systemUsage> 

Sie müssen einen Wert angeben, die auf Ihrer Festplatte zur Verfügung steht, als Fehler nur 29.021 MB freien Speicherplatz eindeutig erwähnt ist, dass Sie festlegen müssen <tempUsage limit="50 gb"/> auf einen Wert kleiner als Ihr freier Speicherplatz

Sie so etwas wie <tempUsage limit="20 gb"/>

hoffe, das hilft tun können!

Viel Glück!

+1

Vielen Dank für Hilfe. Aber ich habe diese Konfigurationsdatei nicht in meiner Web App, sollte ich eine erstellen? Will ActiveMQ es automatisch lesen? – BurnetZhong

+0

Die Datei wird dort angezeigt, wo Ihre activemq-Instanz ausgeführt wird, d. H. An dem Ort, an dem Sie eine Verbindung mit Ihrem Broker herstellen. I. e your {broker_url} Wenn Sie uns diese URL zeigen, können wir darauf hinweisen – Vihar

+0

Nochmals vielen Dank. Mein ActiveMQ wird auf demselben Computer gehostet, also ist es localhost. – BurnetZhong

4

Ich hatte das gleiche Problem, aber eine ActiveMQ.xml irgendwo auf dem Server zu platzieren ist nicht die beste Idee in diesem Fall, denke ich.

Wenn ich einen eingebetteten aktiven mq-Server verwende, möchte ich die gesamte Konfiguration an einem Ort behalten (besonders in meiner Projekt/WAR-Datei).

Jetzt ist es möglich, die tempUsage-Konfigurationswerte direkt bei der Broker-Bean-Definition zu setzen: wie in dieser link beschrieben.

Zum Beispiel:

<amq:broker useJmx="false" persistent="false"> 
    <amq:transportConnectors> 
     <amq:transportConnector uri="tcp://localhost:0"/> 
    </amq:transportConnectors> 
    <amq:systemUsage> 
     <amq:systemUsage> 
      <amq:memoryUsage> 
       <amq:memoryUsage limit="64 mb"/> 
      </amq:memoryUsage> 
      <amq:storeUsage> 
       <amq:storeUsage limit="512 mb"/> 
      </amq:storeUsage> 
      <amq:tempUsage> 
       <amq:tempUsage limit="128 mb"/> 
      </amq:tempUsage> 
     </amq:systemUsage> 
    </amq:systemUsage> 
</amq:broker> 

(amq - namespace = http://activemq.apache.org/schema/corehttp://activemq.apache.org/schema/core/activemq-core.xsd)