2014-11-04 19 views
5

Pracuję na trasach wielbłądowych w RedHat Fuse Service Works, który ma Camel 2.10.Opcje przetwarzania równoległego wielbłądów

będę się dowiedzieć różnic pomiędzy kolejnymi implementacjach:

1/za pomocą drogi SEDA

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

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

2/za pomocą równoległego przetwarzania

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

3/za pomocą nici

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

Z tego, co widziałem, metoda 3 (wątki) pozwala skonfigurować rozmiar puli wątków, który wydaje się być taki sam jak "concurrentConsumers" rozwiązania 1 (SEDA).

Jeśli nie przekażę żadnych parametrów do wątku metody, zachowanie metod 2 i 3 będzie takie samo?

Dzięki z góry,

Pozdrowienia

Odpowiedz

1

Można ustawić liczbę nici w 1), 3), ale 1) może nadal otrzymywać wiadomości z innej trasy, która podobnie jak z (XXX) .Aby ("seda: B"). 2) Musisz ustawić ExecutorService (lub ThreadPool), w przeciwnym razie proces równoległy nie będzie działać tak, jak chcesz.

+1

Więc O czym jest powiedzenie jeśli wiem na pewno, że nie będzie miał inną trasą najbliższych, powinienem użyć rozwiązanie 3) z czymś .threads (2,10)? – user3416249

0

Poniżej znajduje się przykładowy kod robocze:

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() 
+1

W dół wyborcy pls dać kilka komentarzy! – sunleo

Powiązane problemy