web-dev-qa-db-de.com

Wie kann ich einen RESTful-Service über Apache Camel aufrufen?

Ich verwende derzeit eine HTTP-Methode zum Aufrufen einer URL, die ein JIRA-Problem verursacht.

Jetzt möchte ich Apache Camel verwenden. Wie kann ich das verwenden?

Ich muss den folgenden Link über Camel aufrufen:

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

Da ich neu bei Camel bin, schlagen Sie bitte auch einige Lösungen und Beispiele vor.

Vielen Dank

10
jasmeet24

Sie könnten leicht die CXFRS-Komponente verwenden; Wenn Sie dies mit der HTTP-Komponente tun müssen, können Sie dies auch einfach tun:

<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" />

Und natürlich müssen Sie Ihre Nachricht mit dem Header myKey anreichern, bevor Sie zu diesem Teil der Route gelangen.

8
MahdeTo

Siehe auch dieses FAQ zur Verwendung von Dynamic für Endpoints in Camel http://camel.Apache.org/how-do-i-use-dynamic-uri-in-to.html

Das EIP-Muster hierfür ist im Wesentlichen die Empfängerliste.

In Ihrem Fall könnte es also auch zu einem EIP zusammengefasst werden

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

Beachten Sie, dass die http-Komponente in Camel vollständig synchron ist. Wenn Sie über HTTP anfordern/antworten möchten und vermeiden möchten, dass der Anrufer beim Warten auf die Antwortnachricht blockiert wird, können Sie einige der anderen HTTP-Komponenten von Camel verwenden, z.

  • kamel-ahc
  • kamel-http4
  • kamelsteg
9
Claus Ibsen

Ich benutze Apache Kamelsteg

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

    }

});

wenn der Benutzer also auf http: // localhost: 9000/offers klickt, wird der Endpunkt direct: getOffers aufgerufen

definieren Sie nun den getOffers-Endpunkt

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

     }

});

Hier läuft ein anderer Dienst bei 9008 mit einer Restressource von http: // localhost: 9008/api/v2.0/offers und dies ist die Ressource, die ich zu verbrauchen versuche.

wenn die Kamelinstanz gestartet wird, registriert sie beide Routen und führt dann die oben beschriebene Verarbeitung durch

Hinweis Es ist wichtig, die Option? BridgeEndpoint = true hinzuzufügen, damit dies funktioniert

2
selftaught91

Sie können den Dienst REST mit CXFRS Component von camel in Anspruch nehmen. Apache camel verfügt über genügend Informationen dazu.

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

0
UVM