【问题标题】:Startup error of embedded ActiveMQ: Temporary Store limit is 51200 mb嵌入式 ActiveMQ 的启动错误:临时存储限制为 51200 mb
【发布时间】:2015-02-17 05:58:51
【问题描述】:

我有一个 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

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

请帮我离开这里,谢谢!

【问题讨论】:

    标签: java spring activemq


    【解决方案1】:

    在您的activeMQ.xml 中,您将有一些这样的配置

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

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

    你可以做类似&lt;tempUsage limit="20 gb"/&gt;

    希望这会有所帮助!

    祝你好运!

    【讨论】:

    • 感谢您的帮助。但是我的网络应用程序中没有这个配置文件,我应该创建一个吗? ActiveMQ 会自动读取吗?
    • 该文件将出现在您的 activemq 实例运行的位置,即您连接到代理 i 的位置。 e 您的 {broker_url} 如果您向我们展示我们可以指出的网址
    • 再次感谢。我的 ActiveMQ 托管在同一台机器上,所以它是 localhost。
    • 我希望你知道你的activemq目录在哪里,否则在你的系统中找到activemq.xml文件
    • 但是正如您在问题标题中指出的那样,您有一个嵌入式 activeMQ,所以我猜它会在您运行您的网络应用程序时启动
    【解决方案2】:

    我也遇到了同样的问题,但我认为,在这种情况下,将 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 - 命名空间 = http://activemq.apache.org/schema/corehttp://activemq.apache.org/schema/core/activemq-core.xsd)

    【讨论】:

      【解决方案3】:

      如果您使用带有嵌入式 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-16
        • 2014-01-04
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多