我正在尝试使用camel来使用一个安静的Web服务。
为此我正在配置动态端点url,因为RESTful url是在运行时创建的。每次我使用以下CamelContext类方法检查特定端点url是否在我的camel上下文中注册为路由。
端点hasEndpoint(String uri);
在这种情况下,如果端点未注册,那么我使用自定义Route Builder添加到我的驼峰上下文的路由。
我正在使用camel HTTP组件。到目前为止,这对我来说还不错。
但是,我认为性能明智并不好,因为每次我必须检查路由是否注册了驼峰上下文,如果没有,则在进行webservice呼叫之前注册相同的路径。
有人可以告诉我是否有更好的方法在驼峰中使用RESTful Web服务?
我还想知道我使用的RESTful网络服务是否使用OAuth 2.0协议,我是否需要更改代码中的任何内容,因为我只是在消费它?
此致,Nilotpal
感谢您的回复。
我正在检查路由是否已经存在,以确保我最终不会向驼峰上下文添加重复的路由。
关于长寿路线和路线动态,请你解释一下这个问题吗?如何实施路线动态?
如果你能指出一些CXF-RS生产者的例子,也会有所帮助。我阅读了CXFRS的文档,但无法理解它。
由于 Nilotpal
答案 0 :(得分:1)
究竟为什么在拨打电话之前需要检查路由是否已注册?您可能应该设置一个更长寿的路线并将动态路由到resfull资源。
对于Rest with camel,我认为HTTP组件做得很好,但也有更高级别的组件可供使用,更多是为REST设计的。 CXFRS和Restlet,可以在Apache Camel源单元测试中找到restlet的生成器示例,例如RestletProducerGetTest.java。
至于oAuth 2.0,Camel内置了一些oAuth支持,特别是对于谷歌。寻找gauth component。甚至有一个教程,但它可能与您的案例不一致,它仍然可能提供一些背景知识,以便您可以解决您的问题:http://camel.apache.org/tutorial-oauth.html
答案 1 :(得分:0)
CamelContext context = new DefaultCamelContext();
我的目标
我试图拦截传入的请求,并根据传入请求的ip我要调用get offer的动态端点
context.addRoutes(new RouteBuilder(){
public void configure(){
from("jetty:localhost:9000/offers")
.process(new Processor(){
public void process(Exchange exchange) throws Exception {
//getting the request object
HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);
//Extracting information from the request
String requestIP=req.getRemoteAddr();
/**
* After getting the ip address i do necessay processing
* and then add a property to exchange object.
* Destination ip address is the address to which i want to
* send my request
*/
exchange.setProperty("operatorAddress",destinationIpAddress);
}
})
.to("direct:getOffers")
.end();
}
});
现在我将调用getOffers端点
所以首先我会注册
context.addRoutes(new RouteBuilder(){
public void configure(){
from("direct:getOffers")
.toD("jetty:${property.operatorAddress}/api/v2.0/offers?
bridgeEndpoint=true")
.end();
}
});
所以我们可以访问交换对象的operatorAddress属性
${property.operatorAddress}
当我们有动态路线时,我们需要调用
.toD() and not .to()