Вопрос: Возможности параллельной обработки верблюдов


Я работаю на маршрутах Camel в RedHat Fuse Service Works, который имеет Camel 2.10.

Я хотел бы знать различия между следующими реализациями:

1 / с использованием маршрутов SEDA

    from("A")
    .split(body())
    .to("seda:B");

    from("seda:B?concurrentConsumers=4")
    .routeId("MySEDATestRoute")
    .to("C")
    .end();

2 / с использованием параллельной обработки

   from("A")
    .split(body())
    .parallelProcessing()
    .to("C");

3 / использование потоков

    from("A")
    .split(body())
    .threads()
    .to("C");

Из того, что я видел, метод 3 (потоки) позволяет настроить размер пула потоков, который кажется таким же, как «concurrentConsumers» решения 1 (SEDA).

Если я не передам какие-либо параметры потоку метода, будет ли поведение методов 2 и 3 одинаковым?

Заранее спасибо,

С уважением


5


источник


Ответы:


Вы можете установить номер потока в 1), 3), но 1) все равно может получать сообщение от другого маршрута, который похож на (xxx) .to («seda: B»). 2) Вам необходимо настроить ExecutorService (или ThreadPool), иначе parallelProcessing не будет работать так, как вы хотите.


1



Ниже приведен пример рабочего кода:

CamelContext context = getContext();
ExecutorService service = new ThreadPoolBuilder(context).poolSize(10).maxPoolSize(150).maxQueueSize(150).build("CustomPool");

from("properties:{{file.fromLocation}}")
    .log("Received the file...")
    .split().tokenize("\n").executorService(service)
    .streaming()
    .parallelProcessing()

0