当前位置: 首页 > 知识库问答 >
问题:

使用Apache Camel消费RESTful web服务

公西浩
2023-03-14

我正在尝试使用camel使用restful Web服务。

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

endpoint有Endpoint(String uri);

在这种情况下,如果未注册终结点,则使用自定义路由生成器将路由添加到骆驼上下文中。

我使用骆驼HTTP组件。这对我来说很好。

然而,我认为从性能角度来看,这并不好,因为每次我都必须检查一条路由是否已在camel上下文中注册,如果没有,则在进行webservice调用之前注册相同的路由。

有人能告诉我是否有更好的方法来使用骆驼中的RESTful网络服务吗?

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

问候,尼洛帕尔

谢谢你的回复。

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

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

如果您能给我举一些CXF-RS生产商的例子,也会很有帮助。。我阅读了CXFRS的文档,但不能清楚地理解它。

谢谢你,尼洛帕尔

共有2个答案

江坚成
2023-03-14
CamelContext context = new DefaultCamelContext();

我的目标

我试图拦截传入的请求,并根据传入请求的ip,我想调用获取报价的动态endpoint

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();
}
});

现在我将调用getOffersendpoint

所以首先我要登记一下

context.addRoutes(new RouteBuilder(){
     public void configure(){
         from("direct:getOffers")
         .toD("jetty:${property.operatorAddress}/api/v2.0/offers? 
          bridgeEndpoint=true")
        .end();

    }
});

因此,我们可以访问exchange对象的operatorAddress属性

${property.operatorAddress}

还有,当我们有动态路线时,我们需要打电话

.toD()   and not .to()
邰英毅
2023-03-14

确切地说,为什么在打电话之前需要检查路线是否已注册?您或许应该设置一个更长寿命的路由,并动态路由以重新分配资源。

至于用骆驼Rest,我认为超文本传输协议组件做得很好,但是也有更高级别的组件可以使用,更适合REST。CXFRS和Restlet,restlet的生产者示例可以在ApacheCamel源单元测试中找到,比如这个RestletProducerGetTest.java.

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

 类似资料:
  • 我正在使用Spring4.0为RESTfulWeb服务创建POC。如果我们只传递字符串或任何其他基本数据类型,它就可以正常工作。 这个很好用。但如果我想将字节流或文件对象传递给函数,我如何编写具有这些参数的函数?我如何编写提供传递字节流的客户端? 我尝试了这个代码,但是得到了415个错误。 客户端代码-使用apache HttpClient

  • 我正在努力寻找一个成熟的例子,说明如何在Spring Boot框架中使用ApacheCamel进行轮询。 我已经看过了:https://camel.apache.org/manual/latest/polling-consumer.html除此之外:https://camel.apache.org/components/latest/timer-component.html但是代码示例不够广泛,我

  • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

  • 我的Ruby项目中有一个模型重发,它包含内容和状态列。 使用EventMachine使用状态为0的所有记录的最佳/最快方式是什么? 我想创建一个简单的worker,它尝试在每个时段(比如每5分钟)查找status==0的记录 我对EventMachine还是新手,找不到那么多关于如何处理DB的例子。 到目前为止,我做了如下工作,但不确定这是否是最好的实现: 任何帮助都将不胜感激

  • 我试图理解Spring MVC Restful架构。想知道有多少种方法可以将SpringMVC与RESTfulWeb服务集成在一起。我可以看到其中一个是使用Rest模板。 这是在Spring MVC中使用rest Web服务的唯一方法吗? 我们可以单独使用SpringMVC开发web应用程序而不使用任何web服务吗。 如果我说错了,请指正。 谢谢你的帮助。

  • 当消费者实例组出现时,会不会对Kafka的性能产生任何影响。重新启动时id已更改。老年人会发生什么。id它是否仍在代理内存中,或者何时将被删除?假设我有1000个消费者实例,并且所有实例都动态分配组。重新启动时的id。 可以为{log.retention.ms'}提供什么列表值。我可以设置为1毫秒吗?