【问题标题】:Message consumption stuck from activemq using camel jms component使用camel jms组件从activemq卡住的消息消费
【发布时间】:2016-10-24 00:08:11
【问题描述】:

我有一个包含两条骆驼路线的应用程序:

路线 1(消费者路线)

读取没有的文本文件。记录(行分隔),根据每一行拆分它们并将每个拆分记录发送到另一个队列('中间'队列)

路线 2(生产者路线)

从中间队列中读取每条记录,对其进行转换并将它们发送到输出队列。

我正在使用 ActiveMQ 和骆驼 JmsComponent (concurrentConsumers=7, maxConcurrentConsumers=10)。我猜骆驼在下面使用 Spring DMLC 从队列中读取。

配置

activemq.broker.uri = tcp://0.0.0.0:61616?jms.useAsyncSend=true&jms.prefetchPolicy.queuePrefetch=1

<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <property name="targetConnectionFactory" ref="jmsmqConnectionFactory" />
    <property name="reconnectOnException" value="true" />
    <property name="sessionCacheSize" value="7" />
</bean>

<bean id="jmsComponent" class="org.apache.camel.component.jms.JmsComponent">
    <property name="connectionFactory" ref="cachingConnectionFactory" />
    <property name="cacheLevelName" value="CACHE_CONSUMER" />
    <property name="transacted" value="true" />
    <property name="transactionManager" ref="transactionManager" />
</bean>

jmsComponent:queue:INTERMEDIATE?concurrentConsumers=7&maxConcurrentConsumers=10

现在,问题是,如果不是。文件中的记录非常少(10 或更少),拆分记录卡在中间队列中。生产者路由正在运行但没有消息消费。在任何日志中都没有发现异常,并且消费者路由也已启动并正在运行。

但是,通过将 prefetch 限制设置为 0,这个问题消失了,但导致了另一个问题 - 骆驼路线无法被 ctrl+C 强制停止,cacheLevelCACHE_CONSUMER。虽然CACHE_AUTO 工作正常,但性能下降。

现在prefetch &gt; 0 和 SpringDMLC 是否存在任何已知问题,还是我遗漏了什么?

【问题讨论】:

  • hmm 我可以注意到预取大于零的已知问题。但是,请记住预取是在您需要处理它们之前从 ActiveMQ 中提取记录。默认情况下,当骆驼收到停止时,它会首先尝试完成对记录的处理。如果您在尝试完成处理时正在使用的组件关闭,您可能会遇到死锁。您是否查看过 JMX 以查看是否仍有消息卡在执行过程中?

标签: java spring apache-camel spring-jms


【解决方案1】:

我知道这个问题很老,但也许有人会从解决方法中受益。我们遇到了同样的问题,虽然我们没有深入了解它(资源有限且需要及时修复),但我们至少将 Camel 隔离为问题根源。

我们实施的解决方法是简单地使用两个不同的 JMS 组件——一个用于消费者,一个用于生产者。如果有许多消费者/生产者对在同一个队列中生产/消费,则可以将所有消费者放在一个组件中,将所有生产者放在另一个组件中。引入分离后,我们再也没有遇到过这个特殊问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 2021-08-06
    • 2016-02-02
    • 2015-10-26
    • 1970-01-01
    • 2016-03-31
    • 2020-12-09
    • 2012-07-11
    相关资源
    最近更新 更多