骆驼:POST-通过URL-模式请求路由
Camel: POST-request routing by URL-pattern
我正在尝试捕获一些 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");
"from" 投篮时 post。消息已记录。
但是 "to" 似乎没有将 {endpoint} 视为参数 - 它将其视为 常数;所以那个调用的结果失败了。
我不需要硬编码端点,因为 booHost API 将来应该在没有 Camel 更改的情况下进行扩展。
换句话说,我需要在同一个端点上对 http://localhost:8090/api/* to be catched and resent to http://booHost:8090/api/* 的所有调用。
也许我应该使用其他组件?或者我怎样才能做到这一点?
谢谢。
感谢@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"));
它按照建议工作。
我正在尝试捕获一些 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");
"from" 投篮时 post。消息已记录。
但是 "to" 似乎没有将 {endpoint} 视为参数 - 它将其视为 常数;所以那个调用的结果失败了。
我不需要硬编码端点,因为 booHost API 将来应该在没有 Camel 更改的情况下进行扩展。
换句话说,我需要在同一个端点上对 http://localhost:8090/api/* to be catched and resent to http://booHost:8090/api/* 的所有调用。
也许我应该使用其他组件?或者我怎样才能做到这一点?
谢谢。
感谢@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"));
它按照建议工作。