web-dev-qa-db-fra.com

Comment puis-je appeler un service RESTful via Apache Camel?

J'utilise actuellement une méthode HTTP pour appeler une URL qui créera un problème JIRA.

Maintenant, je veux utiliser Apache Camel, comment puis-je l'utiliser?

J'ai besoin d'invoquer le lien suivant via Camel:

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

Comme je suis nouveau chez Camel, veuillez suggérer des solutions et des exemples.

Merci

10
jasmeet24

Vous pouvez facilement utiliser le Composant CXFRS ; si vous avez besoin de le faire en utilisant le Composant HTTP pour une raison quelconque, vous pouvez facilement l'utiliser aussi:

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

Et bien sûr, vous devrez enrichir votre message avec l'en-tête myKey avant d'accéder à cette partie de l'itinéraire.

8
MahdeTo

Voir aussi cette FAQ sur l'utilisation de Dynamic to endpoints dans Camel http://camel.Apache.org/how-do-i-use-dynamic-uri-in-to.html

Le modèle EIP utilisé est la liste des destinataires.

Donc, dans votre cas, cela pourrait aussi être simplifié en un EIP

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

Remarquez que le composant http de Camel est entièrement synchrone. Si vous souhaitez demander/répondre via HTTP et éviter que l'appelant ne se bloque pendant l'attente du message de réponse, vous pouvez utiliser certains des autres composants HTTP de Camel, tels que:

  • chameau
  • camel-http4
  • chameau-jetée
9
Claus Ibsen

J'utilise Apache Camel Jetty

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

    }

});

alors voici quand l'utilisateur va frapper http: // localhost: 9000/offers alors le noeud final direct: getOffers sera invoqué

alors maintenant, définir le point final getOffers

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

     }

});

Ici, un autre service fonctionne à 9008 avec une ressource de repos de http: // localhost: 9008/api/v2.0/offers et c’est la ressource que j’essaie de consommer.

donc, quand l'instance de chameau commence, il enregistre les deux routes, puis il effectue le traitement décrit ci-dessus

Note Il est important d'ajouter l'option de? BridgeEndpoint = true pour que cela fonctionne

2
selftaught91

Vous pouvez utiliser le service REST de Camel à l'aide de CXFRS Component. Apache camel dispose de suffisamment d'informations à ce sujet.

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

0
UVM