Camel:按URL模式进行POST请求路由

时间:2015-02-19 15:55:25

标签: apache-camel

我试图抓住一些POST请求,记录一条消息(以后可能还有一个正文或参数);然后将它们进一步传递给 booHost ,这样客户端就会得到通话结果:

    from("restlet:http://localhost:8090/api/endpointFoo?restletMethod=post")
            .log("oh, it's a message!")
            .routeId("someAPI")
            .to("http://booHost:8090/api/endpointFoo?bridgeEndpoint=true&restletMethod=post");

这很有效。

但是: 我需要的是以这种方式工作的URL模式。我正在尝试:

    from("restlet:http://localhost:8090/api/{endpoint}?restletMethod=post")
            .log("oh, it's a message!")
            .routeId("someAPI")
            .to("http://booHost:8090/api/{endpoint}?bridgeEndpoint=true&restletMethod=post");

我发帖时的"来自" 镜头。消息已记录。

但是" to" 似乎不会将 {endpoint} 视为一个参数 - 它将其视为常量 ;所以调用的结果失败了。

我不需要硬编码端点,因为将来如果没有Camel更改,应该扩展booHost API。

换句话说,我需要将http://localhost:8090/api/ *的所有调用捕获并重新发送到同一端点上的http://booHost:8090/api/ *。

也许我应该使用其他组件?或者我怎样才能这样做?

感谢。

1 个答案:

答案 0 :(得分:0)

感谢@vikingsteve,我开始阅读 recipientList

我已根据this FAQ question

修改了我的代码

最终版本如下:

    from("restlet:http://localhost:8090/api/{endpoint}?restletMethod=post")
            .log(LoggingLevel.INFO, "POST-request to /${headers.endpoint} was sent")
            .routeId("someAPI")
            .recipientList(simple("http://booHost:8090/api/${headers.endpoint}?bridgeEndpoint=true&restletMethod=post"));

按照建议行事。