2016-07-01 40 views
1

要從遠程Web服務器檢索一些打開的數據進行處理,我正在嘗試Apache Camel。Apache Camel示例從HTTP源獲取數據不會得到

問題是,似乎從未收到數據。我已經嘗試過jetty,ahc和cxf組件,但無法使其正常工作。例如像這樣:

import org.apache.camel.CamelContext; 
import org.apache.camel.builder.RouteBuilder; 
import org.apache.camel.impl.DefaultCamelContext; 

public class CamelHttpDemo { 
    public static void main(final String... args) { 
    final CamelContext context = new DefaultCamelContext(); 

     try { 
     context.addRoutes(new RouteBuilder() { 
      @Override 
      public void configure() throws Exception { 
      this.from("direct:start") 
       .to("ahc:http://camel.apache.org/") 
       .process(exchange -> { 
        System.out.println(exchange); 
       }); 
      } 
     }); 

     context.start(); 
     Thread.sleep(10000); 
     context.stop(); 
    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

無輸出是這麼寫的是從來沒有執行的行System.out.println(exchange);,我以爲數據不能檢索。

我正在使用最新版本的Apache Camel,2.17.1。

回答

1

您的路由中需要一些消息生成器來發出將觸發http組件的Exchange。你的路線開始於direct:start,它不能排出新的Exchange s,它只是坐着等待別人啓動這個過程。

使您的路線工作最簡單的方法是用一些生產者替換direct:start。例如,用這個定時器.from("timer://foo?fixedRate=true&period=10000")代替它將每10秒觸發一次http請求。

如果您想手動啓動請求,則需要創建一個ProducerTemplate並使用它發送消息至direct:start。那將是:

ProducerTemplate template = context.createProducerTemplate(); 
template.sendMessage("direct:start", "Message body"); 
+0

好的,我會盡量讓它與ProducerTemplate一起工作。 – Kwebble

+0

我已經爲這種情況添加了代碼段。 –

+1

使用這篇文章我得到了一個工作的例子:http://www.canoo.com/blog/2011/03/14/lego-java-apache-camel-context-and-route-basics/ – Kwebble