当前位置: 首页 > 知识库问答 >
问题:

Apache Artemis-Apache骆驼线程消费者随着时间的推移变得缓慢

鲁烨
2023-03-14

我正在运行ApacheArtemis Broker 2.14.0。以下是用户连接配置:

<beans
   xmlns="http://www.springframework.org/schema/beans"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:jee="http://www.springframework.org/schema/jee"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.1.xsd
      http://www.springframework.org/schema/jee
      http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
      http://camel.apache.org/schema/spring
      http://camel.apache.org/schema/spring/camel-spring.xsd">
      
   <bean class="com.test.CustomProcessBean" id="CustomProcessBean" scope="prototype"/>
   
   <bean id="jmsCF" class="org.apache.qpid.jms.JmsConnectionFactory">
      <property name="remoteURI"  value="ampq://myhost:5672"/>
   </bean>
   
   <bean id="jmsPooledCF" class="org.messaginghub.pooled.jms.JmsPoolConnectionFactory" init-method="start" destroy-method="stop">
      <property name="maxConnections" value="3" />
      <property name="connectionFactory" ref="jmsCF" />
   </bean>
   
   <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
      <property name="connectionFactory" ref="jmsPooledCF" />
      <property name="concurrentConsumers" value="5" />
      <property name="maxConcurrentConsumers" value="10" />
   </bean>
   
   <bean id="jms" class="org.apache.camel.component.amqp.AMQPComponent">
      <property name="configuration" ref="jmsConfig" />
      <property name="transacted" value="true" />
   </bean>
   
   <bean id="errHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
      <property name="deadLetterUri" value="jms:queue:customDLQ"/>
      <property name="redeliveryPolicy" ref="customRedeliveryPolicyConfig"/>
   </bean>
   
   <bean id="customRedeliveryPolicyConfig" class="org.apache.camel.processor.RedeliveryPolicy">
      <property name="maximumRedeliveries" value="3"/>
      <property name="redeliveryDelay" value="8000"/>
   </bean>
   
   <camelContext id="camel"
      xmlns="http://camel.apache.org/schema/spring">
      <endpoint id="etams" uri="jms:queue:test-queue" />
      <route errorHandlerRef="errHandler" >
         <from uri="ref:etams"/>
         <convertBodyTo type="java.lang.String" />
         <threads id="threadedprocess" maxQueueSize="5" poolSize="5" maxPoolSize="5" customId="true" >
            <bean ref="CustomProcessBean" method="processMessage"/>
         </threads>
      </route>
   </camelContext>
   
</beans>

首先,该路由每秒处理约100条消息。随着时间的推移(约6小时),它下降到每秒约25条消息。

在Artemis web控制台的“Consumers”选项卡中,我注意到每个会话都是关闭的,并且经常创建。

从经纪人方面,我们已经提供了足够的12G内存。代理在启用持久性的情况下运行,传入消息大小小于5kb。

驼峰线程是否会随着时间的推移尝试创建更多会话?这是反模式吗?这是消费者超时处理消息的原因吗?当我在配置中不使用Camel线程时(即只使用


共有1个答案

蓬英逸
2023-03-14

我也遇到了同样的问题,通过将JMSendpoint中的cacheLevelName选项设置为CACHE\u CONSUMER解决了这个问题。通过启用事务处理选项,最终将缓存级别设置为cache_NONE

本节将更好地解释:JMS组件-事务和缓存级别

 类似资料:
  • 我在JPA上遇到了以下问题,但这可能更像是一个关于骆驼的概念问题。 我需要一个基于cron的石英消费者。但如果触发了,我想选择JPA组件作为第一步。 但是如果我用“to”调用JPA组件,那么它被用作生产者,而不是消费者。我可以以某种方式使用JPA组件来处理这个问题吗,或者我必须遵循服务激活器(基于bean的)逻辑并将JPA组件留在后面? 提前谢谢你,葛格利

  • 我有一个从JMS队列读取项目并将其写入数据库的路径。 我已经阅读了关于ApacheCamelJMS组件的文档,但我没有得到我的问题的确切和明确的答案,即“如果路由中出现异常,JMS消费者是否会重新插入项目或解锁JMS队列中的消息?”。 谢谢 阿里

  • 我对骆驼生产商有很好的了解,但我不能对各种骆驼消费者保持清醒的头脑。特别是事件驱动消费者和轮询消费者,camel如何知道为这些消费者调用回调? 消费者的一般流量是多少?

  • 我在为 端口设置 消费者以捕获消息时遇到问题。我的: 申请开始: 并且<code>514</code>端口已打开但未侦听 我可以在tcpdump中看到,tcpdump-I eth1-nn-A-s 0端口514和udp正确发送和接收消息。 有人能告诉我我做错了什么吗?

  • 我一直在尝试为Spring引导Kafka骆驼Avro消费者寻找示例代码,但没有运气。我在以下URL找到了Spring Camel Kafka消费者和生产者示例: https://thysmichels.com/2015/09/04/apache-camel-kafka-spring-integration/ 我的具体问题是,一旦我的bean从Avro模式创建,并且我有了POJO类,我如何将上面的c

  • 我已经和ApacheCamel合作了一段时间,做了一些基本的工作,但现在我正在尝试创建一个路由,在该路由中,我可以让多个“消费者”访问同一条路由,或者在路由中添加一个消费者,然后处理消息。 我的想法是拥有一个由事件触发的事件驱动消费者,然后例如从ftp读取文件。我正计划做这样的事情: 所以这个想法是我有一个事件(例如直接或来自消息队列),它具有“fileName”属性,然后使用该属性从ftp下载/