用于从HTTP源获取数据的Apache Camel示例无法获取

时间:2016-07-01 20:25:27

标签: apache-camel

要从远程Web服务器检索一些开放数据进行处理,我正在尝试使用Apache Camel。

问题是似乎从未收到过数据。我已经尝试过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 个答案:

答案 0 :(得分:1)

您的路由中需要一些消息生成器来发出会触发http组件的Exchange。您的路线以direct:start开头,无法发出新的Exchange,只是坐着等待有人启动此过程。

让路线发挥作用的最简单方法是将direct:start替换为某个制作人。例如,用此计时器.from("timer://foo?fixedRate=true&period=10000")替换它将每10秒触发一次http请求。

如果您想手动启动请求,则需要创建ProducerTemplate并使用它向direct:start发送消息。那将是:

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