使用Apache Camel

时间:2015-05-11 16:35:04

标签: rest proxy apache-camel

我在REST API之前使用Apache Camel就像一个智能HTTP代理。我有一个配置文件,其中包含要配置的路由,它运行良好。

为避免复杂性,我将通过以下方式总结代码:

camelContext.addRoutes(new RouteBuilder(){
            @Override
            public void configure() throws Exception {
                from("servlet:///v1.3?matchOnUriPrefix=true")
                    .to("http4://localhost:8080/my-rest-api-v1.3.0?bridgeEndpoint=true&throwExceptionOnFailure=false");
                from("servlet:///v1.2?matchOnUriPrefix=true")
                    .to("http4://localhost:8080/my-rest-api-v1.2.1?bridgeEndpoint=true&throwExceptionOnFailure=false");
            }
        });

我的问题出在端点服务器上。当我从HttpServletRequest中检索请求URL时,它会给我一个“http://localhost:8080/my-rest-api-v1.3.0/resources/companies/”而不是“http://my.site.com/my-rest-api”(这是我的代理的URL)。

如何将请求的主机名传输到我的终端?

我没有找到如何使用Apache Camel。

1 个答案:

答案 0 :(得分:0)

HTTP请求在其Header中具有适当性(如'host'),并且要在camel中使用此属性,您只需将localhost:8080替换为${header.host}并使用recipientList EIP(这样您就可以使用简单语言创建一个URI):

    camelContext.addRoutes(new RouteBuilder(){
        @Override
        public void configure() throws Exception {
            from("servlet:///v1.3?matchOnUriPrefix=true")
                .recipientList(simple("http4://${header.host}/my-rest-api-v1.3.0?bridgeEndpoint=true&throwExceptionOnFailure=false"));
            from("servlet:///v1.2?matchOnUriPrefix=true")
                .recipientList(simple("http4://${header.host}/my-rest-api-v1.2.1?bridgeEndpoint=true&throwExceptionOnFailure=false"));
        }
    });

更新:我根据下一个链接更新了上面的代码:http://camel.apache.org/how-do-i-use-dynamic-uri-in-to.html(要使用动态uri,你必须使用收件人列表EIP)。