如何正确配置带有池的ActiveMQ?

如何正确配置带有池的ActiveMQ?,activemq,connection-pooling,apache-camel,Activemq,Connection Pooling,Apache Camel,我们对AMQ使用以下配置 <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="${brokerURL1}"/> </bean> <bean id="pooledConnectionFactory" class="org.apache.activemq.pool

我们对AMQ使用以下配置

<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表示一切正常,消息已退出队列,但应用程序上没有消息

我已经读过,缓存消费者可能会有问题,相反,应该在配置之后使用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吗?
还是有更好的方法?

您似乎更关心如何配置apache Camel以及如何使用activemq

有许多方法可以配置池等,这主要取决于您在设置中看到的使用/负载模式以及您的需求。您引用的maxConcurrentConsumers等设置将取决于您的骆驼路线以及您在那里设置的消费者数量

简单地说,有两种情况需要优化:发送和接收消息(我也想到了请求/回复,但情况不同)

如果你在应用程序中接收到大量消息,那么你通常会设置消息侦听器,而池并没有多大帮助,因为你不会创建/中断很多连接/会话。只需确保您配置了足够多的并发消费者—数量取决于您的硬件(CPU内核等)和每条消息的大小。您必须测量特定设置以获得最佳性能

当您发送消息时,请按您所说的使用ActiveMQ。链接到的文档还为您要求的设置建议了一些默认值

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

为了获得最大的可靠性,您应该使用事务处理会话,并在安全处理收到的消息后提交它

奇怪的是,你说你丢失了消息,在你的设置中没有任何特定的东西会使你丢失消息。你需要更深入地了解这一点,或者提供一些关于应用程序实现的信息