2014-10-02 103 views
1

我正在使用Camel从Amazon SQS队列中读取消息,执行一些CPU密集型处理,然后将它们置于另一个SQS队列中。骆驼正在通过maven插件调用,使用mvn camel:run如何使用多核处理来自SQS和Camel的消息

在具有多个内核的服务器上运行时,Camel似乎只使用单个内核来处理消息(通过监视所有内核的CPU使用情况来观察)。 我如何利用所有可用的内核?

事情我曾尝试:

  • 运行JVM的多个实例(例如,通过并行运行几个mvm camel:run作业)。这工作,但似乎并不理想。
  • 在消费者上设置maxMessagesPerPoll=10。似乎没有什么区别。

有问题的路线:

 <route id="marctomods" errorHandlerRef="eh"> 
     <from uri="aws-sqs://{{sqs.environment}}-normalize-marcxml?accessKey=${access.key}&amp;secretKey=${secret.key}&amp;amazonSQSClient=#sqsClient&amp;maxMessagesPerPoll=10" /> 
     <process ref="modsProcessor"/> 
     <to uri="aws-sqs://{{sqs.environment}}-enrich?accessKey=${access.key}&amp;secretKey=${secret.key}&amp;amazonSQSClient=#sqsClient" /> 
    </route> 

回答

0

你通常只能通过一个途径获得过境一条消息。 http://camel.apache.org/parallel-processing-and-ordering.html解释了并行处理选项。

你可以,例如,读取SQS消息放到一个SEDA队列,然后有多个平行的消费者从SEDA读取队列,例如

<route> 
    <from uri="aws-sqs://{{sqs.environment}}-normalize-marcxml /> 
    <to uri="seda:myQueue"> 
</route> 

<route> 
    <from uri="seda:myQueue?concurrentConsumers=10" /> 
    <process ref="modsProcessor"/> 
    <to uri="aws-sqs://{{sqs.environment}}-enrich> 
</route> 
+0

这个工作,虽然我也不得不加maxMessagesPerPoll = 10 SQS消费者获得最佳结果。 – 2014-10-03 15:34:41

相关问题