How can I invoke a RESTful service through Apache Camel?

喜欢而已 提交于 2020-01-10 14:11:31

问题


I am currently using a HTTP method for invoking some URL which will create a JIRA issue.

Now I want to use Apache Camel, how can I use that?

I need to invoke the following link through Camel:

http://localhost:8080/rest/api/2/project/" + key + /components

As I'm new to Camel, please suggest some solutions and examples too.

Thanks


回答1:


You could easily use the CXFRS Component; if you need to do it using the HTTP Component for some reason you could easily use that as well:

<setHeader headerName="CamelHttpUri">
      <simple>http://localhost:8080/rest/api/2/project/${header.myKey}/components</simple>
</setHeader>
<inOut uri="http://doesnt.matter.we/override/it/anyways" />

And of course you will need to enrich your message with the myKey header before getting to this part of the route.




回答2:


See also this FAQ about using dynamic to endpoints in Camel http://camel.apache.org/how-do-i-use-dynamic-uri-in-to.html

Essentially the EIP pattern for this is the recipient list.

So in your case it could also be simplified to as one EIP

<recipientList>
  <simple>http://localhost:8080/rest/api/2/project/${header.myKey}/components</simple>
</recipientList>

Mind the http component in Camel is fully synchronous. If you want to do request/reply over HTTP and avoid having the caller block while waiting for the reply message, then you can use some of the other HTTP components from Camel such as:

  • camel-ahc
  • camel-http4
  • camel-jetty



回答3:


I am using apache camel jetty

CamelContext context = new DefaultCamelContext();
    public void configure(){
           context.addRoutes(new RouteBuilder(){
           from("jetty:localhost:9000/offers")
           .to("direct:getOffers")
           .end();

    }

});

so here when the user will hit http://localhost:9000/offers then the endpoint direct:getOffers will get invoked

so now defining the getOffers end point

context.addRoutes(new RouteBuilder(){
     public void configure(){
          from("direct:getOffers")
          .to("jetty:http://localhost:9008/api/v2.0/offers?  
          bridgeEndpoint=true")
         .end();

     }

});

Here another service is running at 9008 having a rest resource of http://localhost:9008/api/v2.0/offers and this is the resource that i am trying to consume.

so when camel instance starts it registers both the routes then it does the processing as described above

Note Its important to add the option of ?bridgeEndpoint=true for this to work




回答4:


You can consume REST service from camel using CXFRS Component.Apache camel has enough information about this.

http://camel.apache.org/cxfrs.html



来源:https://stackoverflow.com/questions/10169570/how-can-i-invoke-a-restful-service-through-apache-camel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!