How can I invoke a RESTful service through Apache

2020-02-26 08:11发布

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

4条回答
劫难
2楼-- · 2020-02-26 08:33

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.

查看更多
虎瘦雄心在
3楼-- · 2020-02-26 08:35

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

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

查看更多
做自己的国王
4楼-- · 2020-02-26 08:41

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
查看更多
爷的心禁止访问
5楼-- · 2020-02-26 08:41

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

查看更多
登录 后发表回答