2012-05-04 37 views
9

Làm cách nào để thêm tuyến đường lạc đà vào thời gian chạy trong Java? Tôi đã tìm thấy một ví dụ Grails nhưng tôi đã thực hiện nó trong Java.Thêm tuyến đường lạc đà khi chạy trong Java

Ứng dụng của tôiContext.xml đã có một số tuyến tĩnh được xác định trước và tôi muốn thêm một số tuyến động vào thời gian chạy. Có thể không? Bởi vì cách duy nhất để bao gồm tuyến động là viết route.xml và sau đó tải định nghĩa tuyến đường về ngữ cảnh. Làm thế nào nó sẽ hoạt động trên các tuyến tĩnh hiện có? Route at runtime

Trả lời

14

bạn chỉ có thể gọi một vài API khác nhau trên CamelContext để thêm các tuyến đường ... một cái gì đó như thế này

context.addRoutes(new MyDynamcRouteBuilder(context, "direct:foo", "mock:foo")); 
.... 
private static final class MyDynamcRouteBuilder extends RouteBuilder { 
    private final String from; 
    private final String to; 

    private MyDynamcRouteBuilder(CamelContext context, String from, String to) { 
     super(context); 
     this.from = from; 
     this.to = to; 
    } 

    @Override 
    public void configure() throws Exception { 
     from(from).to(to); 
    } 
} 

thấy kiểm tra đơn vị này cho ví dụ hoàn chỉnh ...

https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/builder/AddRoutesAtRuntimeTest.java

+0

Cảm ơn phản hồi của bạn nhưng tôi đang tìm cách có thể định cấu hình hơn để thực hiện. Trong trường hợp của tôi một ứng dụng bên ngoài có thể quyết định các tuyến đường của ứng dụng của tôi, tôi đang tìm giải pháp có thể cấu hình hơn cho vấn đề này –

+1

Giải pháp trên trông khá cấu hình đối với tôi. Bạn có muốn lộ trình hoàn chỉnh động không? Sau đó, bạn chỉ có thể sử dụng xml. –

+0

Tất cả mã Java của nó, vì vậy bên trong phương thức cấu hình bạn có thể sử dụng nếu .. khác, gọi các phương thức khác, v.v. Vì vậy, bạn có thể làm cho DSL rất năng động. Ngoài ra, bạn có thể có X số lớp mẫu để sử dụng vv Và nếu bạn không thích DSL trong RouteBuilder, bạn có thể xây dựng tuyến đường bằng cách sử dụng các lớp trong gói mô hình trực tiếp. –

1

@Himanshu, Vui lòng xem tùy chọn dynamicroute (nói cách khác là trượt định tuyến) có thể giúp bạn tự động định tuyến đến các 'điểm đến khác nhau' dựa trên cer điều kiện tain.

Kiểm tra liên kết trợ giúp bộ định tuyến động trong trang web lạc đà;

http://camel.apache.org/dynamic-router.html

from("direct:start") 
    // use a bean as the dynamic router 
    .dynamicRouter(method(DynamicRouterTest.class, "slip")); 

Và trong phương pháp trượt;

/** 
* Use this method to compute dynamic where we should route next. 
* 
* @param body the message body 
* @return endpoints to go, or <tt>null</tt> to indicate the end 
*/ 
public String slip(String body) { 
    bodies.add(body); 
    invoked++; 

    if (invoked == 1) { 
     return "mock:a"; 
    } else if (invoked == 2) { 
     return "mock:b,mock:c"; 
    } else if (invoked == 3) { 
     return "direct:foo"; 
    } else if (invoked == 4) { 
     return "mock:result"; 
    } 

    // no more so return null 
    return null; 
} 

Hy vọng nó sẽ giúp ...

Cảm ơn.

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