嵌入式ActiveMQ的启动错误:临时存储限制为51200 mb

时间:2014-12-18 12:34:42

标签: java spring activemq

我有一个Spring Web应用程序,可以发送和监听独立的ActiveMQ。 当我启动Web应用程序时,它显示:

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

我用Google搜索并阅读了很多文章,它们都引用了configure broker和systemusage来限制临时存储大小。 但是,我不知道如何在Spring配置中执行此操作。下面是我的配置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" />

请帮助我离开这里,谢谢!

3 个答案:

答案 0 :(得分:11)

在你的activeMQ.xml中,你会有类似这样的配置

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

您需要指定磁盘上可用的值,因为错误明确提到您需要将<tempUsage limit="50 gb"/>设置为小于可用空间的值的29021 MB可用空间

您可以执行<tempUsage limit="20 gb"/>

之类的操作

希望这有帮助!

祝你好运!

答案 1 :(得分:5)

我遇到了同样的问题,但我认为在这种情况下在服务器上放置一个activeMQ.xml并不是最好的主意。

当我使用嵌入式活动mq服务器时,我希望将所有配置保存在一个地方(特别是在我的项目/ war文件中)。

现在可以直接在broker-bean定义中设置tempUsage配置值:如link中所述。

例如:

<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/core http://activemq.apache.org/schema/core/activemq-core.xsd

答案 2 :(得分:0)

如果您使用带有嵌入式 ActiveMQ 代理的 Spring 应用程序,您可以指定自定义 activemq.xml,如:How to specify a custom activemq.xml with a Spring embedded ActiveMQ broker?

然后您可以根据您的环境调整 tempUsage 值:

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