activemq - 如何使用池正确配置 ActiveMQ?

标签 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.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 等将取决于您的 Camel 路由以及您在那里设置的消费者数量。

简单地说,有两个场景需要优化: 发送和接收消息(请求/回复也会出现在脑海中,但那是另一回事了)。

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

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

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

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

奇怪的是,您说您丢失了消息,您的设置中没有任何特定的内容会使您丢失消息。您需要进一步跟踪此问题或提供有关应用程序实现的一些信息。

关于activemq - 如何使用池正确配置 ActiveMQ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542953/

相关文章:

c# - Oracle 在 open() 之后创建自动连接

java - 了解 Scatter Gather 的企业集成?

java - Apache Camel http 到 http 路由以及响应转换

java - Apache Camel MultiCasting - InvalidPayloadException

jakarta-ee - JMS 主题与选择器

java - ActiveMQ 和 CachingConnectionFactory 的自动重新连接问题

msmq - 多播、消息传递、ActiveMQ 与 MSMQ?

python - 关于python模块连接ActiveMQ的建议

sql-server-2008 - SQL Server 2008 中的连接最大池大小

java - 在 MySQL 中一起使用准备好的语句和连接池