Как я могу улучшить производительность очереди Seda?

Возьмите этот пример:

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?

1 ответ

Решение

SEDA с concurrentConsumers > 1 абсолютно поможет с пропускной способностью, потому что она позволит нескольким потокам работать параллельно... но вам нужно будет реализовать свой собственный механизм блокировки, чтобы убедиться, что только один поток достигает заданной конечной точки http в заданной точке. время

в противном случае, здесь представлен обзор ваших вариантов: http://camel.apache.org/parallel-processing-and-ordering.html

Короче говоря, если вы можете использовать JMS, тогда рассмотрите возможность использования групп сообщений ActiveMQ в качестве тривиального для использования и предназначенного именно для этого случая использования (параллельная обработка, но однопотоковая с помощью групп сообщений и т. д.).

Другие вопросы по тегам