1

我正在尝试使用骆驼来使用宁静的 Web 服务。

为此,我正在配置动态端点 url,因为 RESTful url 是在运行时创建的。每次我使用 CamelContext 类的以下方法检查特定端点 url 是否在我的骆驼上下文中注册为路由时。

端点 hasEndpoint(String uri);

在这种情况下,如果端点未注册,那么我使用自定义路由生成器将路由添加到我的骆驼上下文。

我为此使用骆驼 HTTP 组件。到目前为止,这对我来说效果很好。

但是,我认为从性能角度来看,这并不好,因为每次我必须检查路由是否已在骆驼上下文中注册,如果没有,则在进行 web 服务调用之前进行注册。

有人可以告诉我是否有更好的方法在骆驼中使用 RESTful Web 服务?

我还想知道我正在使用的 RESTful web 服务是否使用 OAuth 2.0 协议,我是否需要在我的代码中更改任何内容,因为我只是在使用它?

问候, 尼洛帕尔


感谢您的回复。

我正在检查该路线是否已经存在,以确保我最终不会将重复的路线添加到骆驼上下文中。

关于长寿路线和路线动态,你能解释一下吗?如何实现路由动态?

如果您能指出一些 CXF-RS 生产者示例,这也会很有帮助。我阅读了 CXFRS 的文档,但无法清楚地理解它。

谢谢尼洛帕尔

4

2 回答 2

1

究竟为什么在拨打电话之前需要检查路由是否已注册?您也许应该设置一个更长寿的路线和路线动态以重新获得资源。

至于 Rest with camel,我认为 HTTP 组件做得很好,但也有更高级别的组件可供使用,更多的是为 REST 设计的。 CXFRSRestlet,restlet 的生产者示例可以在 Apache Camel 源单元测试中找到,例如这个RestletProducerGetTest.java

至于 oAuth 2.0,Camel 内置了一些 oAuth 支持,尤其是对 google。寻找高斯组件。甚至还有一个教程,但它可能与您的情况不一致,它仍然可能提供一些背景知识,以便您解决问题:http ://camel.apache.org/tutorial-oauth.html

于 2012-08-21T18:32:51.133 回答
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()
于 2016-08-25T14:53:22.397 回答