我正在考虑两个小的Spring Boot应用程序:
使用Springs RestTemplate
,我可以轻松地在应用程序2中实现此GET请求:
RestTemplate template = new RestTemplate();
String response = template.getForBody("http://localhost:8081/camel", String.class);
System.out.println(response);
我现在的目标是使用Apache Camel而不是Spring的RestTemplate
。
我已经尝试定义以下RouteBuilder:
public class MyRoutes extends RouteBuilder {
@Override
public void configure() throws Exception() {
from("jetty:http://localhost:8081/camel").to("direct:processRest");
from("direct:processRest").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println(exchange.getIn().getBody());
}
});
}
}
但是,当我运行应用程序时,收到以下错误:
org.apache.camel.spring.boot.CamelSpringBootInitializationException: java.net.BindException: Address already in use: bind
Spring Boot或Apache Camel会自动尝试在端口8081上启动Jetty服务器,但其他Web服务(应用程序1)已在此端口上运行。
有人知道如何避免这个问题吗?
答案 0 :(得分:0)
您遇到的问题来自于您将Camel的Jetty组件用作消费者,这会启动嵌入式Jetty服务器并将其绑定到端口8081,从而与你的Spring Boot应用程序。要发送HTTP请求,您应该使用Jetty组件作为生产者,即将路由定义更改为
from("scheduler:camelTest?delay=1000").to("jetty:http://localhost:8081/camel").to("direct:processRest");