2014-11-04 21 views
5

Tôi đang làm việc trên các tuyến đường Camel trong Công việc Dịch vụ Cầu chì RedHat có Camel 2.10.Tùy chọn xử lý song song Camel

Tôi muốn biết sự khác nhau giữa việc triển khai như sau:

1/sử dụng các tuyến đường SEDA

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

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

2/sử dụng xử lý song song

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

3/sử dụng đề

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

Từ những gì tôi đã nhìn thấy phương pháp 3 (chủ đề) cho phép để cấu hình kích thước hồ bơi thread mà có vẻ giống như "concurrentConsumers" của giải pháp 1 (SEDA).

Nếu tôi không chuyển bất kỳ tham số nào cho chuỗi phương thức, hành vi của phương pháp 2 và 3 có giống nhau hay không?

Cảm ơn trước,

Trân

Trả lời

1

Bạn có thể thiết lập số lượng thread trong 1), 3), nhưng 1) vẫn có thể nhận được thông báo từ tuyến đường khác mà giống như từ (xxx) .to ("seda: B"). 2) Bạn cần thiết lập ExecutorService (hoặc ThreadPool), nếu không việc parallelProcessing sẽ không hoạt động như bạn muốn.

+1

Vì vậy gì vợi nói là nếu tôi biết chắc chắn tôi sẽ không có con đường khác đến, tôi nên sử dụng giải pháp 3) với một cái gì đó giống như .threads (2,10)? – user3416249

0

Dưới đây là đoạn code mẫu làm việc:

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

Xuống cử tri xin cho một số ý kiến! – sunleo

Các vấn đề liên quan