Rest 使用Apache Camel将请求的主机保留到端点

Rest 使用Apache Camel将请求的主机保留到端点,rest,proxy,apache-camel,Rest,Proxy,Apache Camel,我使用ApacheCamel就像在RESTAPI前面使用智能HTTP代理一样。我有一个配置文件,其中包含要配置的路由,它非常有效 为了避免复杂性,我将通过以下方式总结代码: camelContext.addRoutes(new RouteBuilder(){ @Override public void configure() throws Exception { from("servlet:///v1.3?match

我使用ApacheCamel就像在RESTAPI前面使用智能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时,它会给我一个“”而不是“”(这是我的代理的URL)

如何将请求的主机名传输到端点


我找不到如何使用ApacheCamel来实现它。

HTTP请求在其标头中有属性(如“主机”),要在Camel中使用此属性,您只需将
localhost:8080
替换为
${Header.host}
,并使用recipientList EIP(因此您可以使用简单语言创建URI):


更新:我根据下一个链接更新了上面的代码:(要使用动态uri,必须使用收件人列表EIP)。

Ok。这里好像不管用。我在Java工作。您是在Groovy中工作,还是由Camel指定的?Nicolas,您是对的。简单语言不适用于(..)。要构造URI,必须使用recipientList模式:。我已经更新了我的答案。
    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"));
        }
    });