Parallel processing 如何使用多个核心来处理来自SQS的消息
我使用Camel从AmazonSQS队列中读取消息,进行一些CPU密集型处理,然后将它们放在另一个SQS队列中。Camel是通过maven插件调用的,使用的是Parallel processing 如何使用多个核心来处理来自SQS的消息,parallel-processing,apache-camel,amazon-sqs,Parallel Processing,Apache Camel,Amazon Sqs,我使用Camel从AmazonSQS队列中读取消息,进行一些CPU密集型处理,然后将它们放在另一个SQS队列中。Camel是通过maven插件调用的,使用的是mvn Camel:run 当在具有多个核心的服务器上运行时,Camel似乎只使用单个核心来处理消息(通过监视所有核心的CPU利用率可以观察到)如何利用所有可用的内核? 我尝试过的事情: 运行JVM的多个实例(例如,通过并行运行多个mvm camel:run作业)。这是可行的,但似乎并不理想 在使用者上设置maxMessagesPerPo
mvn Camel:run
当在具有多个核心的服务器上运行时,Camel似乎只使用单个核心来处理消息(通过监视所有核心的CPU利用率可以观察到)如何利用所有可用的内核?
我尝试过的事情:
- 运行JVM的多个实例(例如,通过并行运行多个
作业)。这是可行的,但似乎并不理想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>
通过一条路线,通常只能收到一封邮件。解释并行处理选项 例如,您可以将来自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>
虽然我还必须在SQS使用者上添加maxMessagesPerPoll=10以获得最佳结果,但这仍然有效。