How can I invoke a RESTful service through Apache Camel?

前端 未结 4 1198
Happy的楠姐
Happy的楠姐 2020-12-31 12:41

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

相关标签:
4条回答
  • 2020-12-31 12:42

    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.

    0 讨论(0)
  • 2020-12-31 12:52

    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
    0 讨论(0)
  • 2020-12-31 13:02

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

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

    0 讨论(0)
  • 2020-12-31 13:05

    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

    0 讨论(0)
提交回复
热议问题