【问题标题】:How can I use multiple cores to process messages from SQS with Camel如何使用多个核心处理来自 Camel 的 SQS 的消息
【发布时间】:2014-11-27 23:46:09
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您通常只会在通过路线的过程中收到一条消息。 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>
    

    【讨论】:

    • 这很有效,尽管我还必须在 SQS 消费者上添加 maxMessagesPerPoll=10 以获得最佳结果。
    猜你喜欢
    • 2017-05-29
    • 2016-09-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多