使用camel jms组件从activemq消耗消息消耗

时间:2016-06-22 07:34:25

标签: java spring apache-camel spring-jms

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

  

路线1(消费者路线)

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

  

路线2(制片人路线)

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

我正在使用带有驼峰JmsComponent(concurrentConsumers=7, maxConcurrentConsumers=10)的ActiveMQ。我想camel使用下面的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 cacheLevel无法强制停止驼峰路由{{1 }}。虽然CACHE_CONSUMER工作正常,但性能会下降。

现在CACHE_AUTO和SpringDMLC存在任何已知问题,还是我遗漏了什么?

0 个答案:

没有答案