簡體   English   中英

Apache Camel如何從路由動態添加/刪除端點

[英]Apache Camel how to add/remove endpoints dynamically from a route

我試圖熟悉EIP和Apache Camel,但我有一個用例,我不確定如何使用Camel來表達或實現。

用例:

想象一下,您已經設計了一個集成解決方案,該解決方案可以從ftp獲取文件,進行一些處理並將其上傳到隊列中。 您選擇了Apache Camel來實現此解決方案,並且您在Java DSL中的路由如下所示:

 from("ftp://user@hostname/directoryname")
   .process(new Processor() {
              public void process(Exchange exchange) throws Exception
              {
                //my fantastic prosessing goes here
              }
 }).to("jms:queue:queueName");

路線可能比這復雜得多,但這並不重要。 想象一下,您的解決方案取得了巨大的成功,以至於計划實施一項服務,任何人都可以添加他的ftp服務器並處理文件並將其上傳到隊列中。 所以你想要的是

  1. (靈活性)能夠從您的應用程序動態添加/刪除服務器
  2. (擴展)能夠處理大量此類服務器

讓我們忘記#2並關注“靈活性”部分。

所以問題是,我想:

如何動態(在運行時)向Apache Camel路由添加端點或從中刪除端點?

到目前為止,我認為:

首先,我承認我對集成模式不是很熟悉,但是只是掃描目錄,唯一可以滿足要求的就是Content Enricher 它可以傳遞消息,然后轉到其他地方然后帶走其他東西。 所以我在想,如果有人添加ftp服務器,則連接詳細信息可以封裝在消息中,然后Content Enricher可以連接到該ftp服務器並獲取文件並通過路由將其進一步推送...。一個能夠連接到多個ftp服務器的Content Enricher 首先,我不認為這是該模式背后的意圖,其次,由於Camel中有ftp 組件 ,因此我應該可以在這種情況下使用它

第二種方法是像使用vm組件那樣將路由分成兩部分,如下所示:

 from("ftp://user@hostname/directoryname").to("vm:internalQ");
 from("vm:internalQ")
   .process(new Processor() {
              public void process(Exchange exchange) throws Exception
              {
                //my fantastic prosessing goes here
              }
 }).to("jms:queue:queueName");

因此,現在,我可以使用寫入到該內部隊列的ftp端點創建許多路由,以便可以將其拾取。 動態地將路由添加到CamelContext似乎是可行的( 在Java運行時添加駱駝路由 )。 那是路要走嗎? 還是我只是想以一種並非旨在使用的方式使用Camel

您可以動態地將路由添加到CamelContext

MyRouteBuilder trb = new MyRouteBuilder(servletEndpoint, mockEndpoint);
camelContext.addRoutes(trb);

和MyRouteBuilder:

MyRouteBuilder(Endpoint servletEndpointStart, MockEndpoint mockEndpointEnd, String allowedParameters){
        this._servletEndpoint = servletEndpointStart;
        this._mockEndpoint = mockEndpointEnd;
    }

    @Override
    public void configure() throws Exception {
        from(this._servletEndpoint)
        .id(TESTING_ROUTE_NAME)
        .process(new Processor(){ // some processor })
        .to(_mockEndpoint);
    }

您也可以修改路由,但是為了使它正常運行,您需要重新啟動它,並在以下位置檢查其完成方式: org.apache.camel.model.RouteDefinition.adviceWith(ModelCamelContext, RouteBuilder)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM