2012-07-18 75 views
10

我們採用以下配置AMQ如何正確配置ActiveMQ池?

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="${brokerURL1}"/> 
</bean> 
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> 
    <property name="maxConnections" value="10"/> 
    <property name="maximumActive" value="100"/> 
    <property name="connectionFactory" ref="jmsConnectionFactory"/> 
</bean> 
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="transacted" value="false"/> 
    <property name="concurrentConsumers" value="5"/> 
    <property name="maxConcurrentConsumers" value="10"/> 
</bean> 

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> 
    <property name="configuration" ref="jmsConfig"/> 
</bean> 

週期性我有奇怪的問題 - 寬鬆的消息。其實AMQ說一切OK和消息出列但對應用程序沒有消息......

我讀過它可以用發行緩存消費者,而是應該JmsConfiguration以下配置

<bean id="jmsConfig" class="org.apache.activemq.camel.component.ActiveMQConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="transacted" value="false"/> 
    <property name="concurrentConsumers" value="5"/> 
    <property name="maxConcurrentConsumers" value="10"/> 
    <property name="cacheLevelName" value="CACHE_CONSUMER"/> 
</bean> 

不使用任何人都知道如何正確配置activemq? 哪些值應該設置爲最佳性能和良好的可靠性?

<property name="maxConnections" value="?"/> 
<property name="maximumActive" value="?"/> 
<property name="concurrentConsumers" value="?"/> 
<property name="maxConcurrentConsumers" value="?"/> 

我應該使用org.apache.activemq.pool.PooledConnectionFactory或者有更好的辦法?

回答

5

看來你似乎更多問如何配置Apache Camel如何使用ActiveMQ。

根據您在安裝中看到的使用/加載模式以及您的要求,有很多方法可以大量配置池等。您引用maxConcurrentConsumers等的這些設置將取決於您的駱駝路線以及您在此設置的消費者數量。

簡單地說,有兩種情況可以優化:發送和接收消息(請求/回覆也是想到的,但這是一個不同的故事)。

如果您在應用程序中收到大量消息,那麼您通常會設置消息監聽器和共享池並沒有多大幫助,因爲您不會創建/拆卸大量連接/會話。只要確保你配置了足夠的併發消費者 - 多少取決於你的硬件(#CPU內核等)和每條消息的大小。您必須測量您的特定設置以獲得最佳性能。

正如你所說,當你發送消息時,ActiveMQ的Camel suggests the PooledConnectionFactory。鏈接到的文檔還爲您要求的設置提供了一些默認值。

<property name="maxConnections" value="8" /> 
    <property name="maximumActive" value="500" /> 
    <property name="transacted" value="false"/> 

對於最大的可靠性,您應該使用事務性的會話,並承諾收到的消息,一旦你已經安全地處理。

奇怪的是,你說你失去了信息,沒有任何具體的設置會讓你失去信息。您需要進一步跟蹤這些信息,或者提供關於應用實施的一些信息。