我正在使用Camel从Amazon SQS队列中读取消息,执行一些CPU密集型处理,然后将它们放在另一个SQS队列上。使用mvn camel:run
通过maven插件调用Camel。
在具有多个内核的服务器上运行时,Camel似乎只使用单个内核来处理消息(通过监视所有内核的CPU利用率来观察)。 如何利用所有可用内核?
我尝试过的事情:
mvm camel:run
个作业)。这有效,但似乎并不理想。maxMessagesPerPoll=10
。似乎没有什么区别。有问题的路线:
<route id="marctomods" errorHandlerRef="eh">
<from uri="aws-sqs://{{sqs.environment}}-normalize-marcxml?accessKey=${access.key}&secretKey=${secret.key}&amazonSQSClient=#sqsClient&maxMessagesPerPoll=10" />
<process ref="modsProcessor"/>
<to uri="aws-sqs://{{sqs.environment}}-enrich?accessKey=${access.key}&secretKey=${secret.key}&amazonSQSClient=#sqsClient" />
</route>
答案 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>