5

举个例子:

from("seda:data").log("data added to queue")
                  .setHeader("CamelHttpMethod", constant("POST"))
                  .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
                  .process(new Processor() {
                      public void process(Exchange exchange) throws Exception {
                              exchange.setProperty(Exchange.CHARSET_NAME, "UTF-8");
                      }
                   })
                  .recipientList(header(RECIPIENT_LIST))
                  .ignoreInvalidEndpoints().parallelProcessing();

假设 RECIPENT_LIST 标头仅包含一个 http 端点。对于给定的 http 端点,应该按顺序处理消息,但是可以并行处理不同端点的两条消息。

基本上,我想知道是否可以采取任何措施来提高性能。例如,使用 concurrentConsumers 会有帮助吗?

4

1 回答 1

6

concurrentConsumers > 1 的 SEDA 绝对有助于提高吞吐量,因为它允许多个线程并行运行……但您需要实现自己的锁定机制以确保在给定的情况下只有单个线程在访问给定的 http 端点时间

否则,这里是您的选项的概述: http: //camel.apache.org/parallel-processing-and-ordering.html

简而言之,如果您可以使用 JMS,那么可以考虑使用ActiveMQ 消息组,因为它使用起来很简单,并且专为这种用例而设计(并行处理,但消息组的单线程等)。

于 2013-09-06T03:44:47.940 回答