Как я могу улучшить производительность очереди 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 в качестве тривиального для использования и предназначенного именно для этого случая использования (параллельная обработка, но однопотоковая с помощью групп сообщений и т. д.).