【问题标题】:How to properly to configure ActiveMQ with pooling?如何正确配置带有池的 ActiveMQ?
【发布时间】:2012-07-19 04:11:37
【问题描述】:

我们对 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 还是有更好的方法?

【问题讨论】:

    标签: activemq connection-pooling apache-camel


    【解决方案1】:

    看来你更多的是在问如何配置 Apache Camel 如何使用 ActiveMQ。

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

    简单地说,有两种情况需要优化:发送和接收消息(也想到请求/回复,但那是另一回事)。

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

    当你发送消息时,如你所说的 ActiveMQ 的骆驼suggests the PooledConnectionFactory。链接到的文档还为您要求的设置建议了一些默认值。

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

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

    奇怪的是你说你丢失了消息,你的设置中没有任何特定的东西会让你丢失消息。您需要进一步追踪这一点,或者提供一些有关应用实施的信息。

    【讨论】:

      猜你喜欢
      • 2014-03-20
      • 2020-02-24
      • 1970-01-01
      • 2022-09-30
      • 2019-06-06
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 2015-07-29
      相关资源
      最近更新 更多