要从远程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。
答案 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");