如何使用多个核心来处理来自SQS和Camel的消息

时间:2014-10-02 21:43:17

标签: parallel-processing apache-camel amazon-sqs

我正在使用Camel从Amazon SQS队列中读取消息,执行一些CPU密集型处理,然后将它们放在另一个SQS队列上。使用mvn camel:run通过maven插件调用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>

1 个答案:

答案 0 :(得分: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>