有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个SpringWeb应用程序,它将在独立的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

我在谷歌上搜索并阅读了许多文章,它们都提到配置代理和系统使用以限制临时存储的大小。 但是,我不知道如何在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) 个答案

  1. # 1 楼答案

    在您的activeMQ.xml中,您将有如下一些配置

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

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

    您可以执行类似<tempUsage limit="20 gb"/>的操作

    希望这有帮助

    祝你好运

  2. # 2 楼答案

    我也有同样的问题,但是放置了一个activeMQ。我认为,在这种情况下,服务器上某个地方的xml不是最好的主意

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

    现在可以直接在代理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/corehttp://activemq.apache.org/schema/core/activemq-core.xsd

  3. # 3 楼答案

    如果将Spring应用程序与嵌入式ActiveMQ代理一起使用,则可以指定一个自定义的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>