如何提高Seda队列的性能?

yal*_*lis 4 apache-camel

举个例子:

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();
Run Code Online (Sandbox Code Playgroud)

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

基本上,我想知道是否有任何措施可以改善性能.例如,使用concurrentConsumers会有帮助吗?

Ben*_*Day 6

并发消费者> 1的SEDA绝对有助于提高吞吐量,因为它允许多个线程并行运行...但是你需要实现自己的锁定机制,以确保在给定的给定的http端点上只有一个线程时间

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

简而言之,如果您可以使用JMS,那么请考虑使用ActiveMQ消息组作为其简单易用的用途,并且专门针对此用例(并行处理,但是通过消息组进行单线程处理等).