我有一个有两条骆驼路线的应用程序:
路线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存在任何已知问题,还是我遗漏了什么?