Как я могу вызвать службу RESTful через Apache Camel?

в настоящее время я использую метод HTTP для вызова некоторого URL-адреса, который создаст проблему JIRA.

теперь я хочу использовать Apache Camel, как я могу это использовать?

Мне нужно вызвать следующую ссылку через Camel:

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

поскольку я новичок в Camel, пожалуйста, предложите некоторые решения и примеры.

спасибо

4 ответов


Вы можете легко использовать компонент CXFRS; если вам нужно сделать это с помощью HTTP компонент по какой-то причине вы можете легко использовать это:

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

и, конечно, вам нужно будет обогатить свое сообщение с помощью myKey заголовок, прежде чем добраться до этой части маршрута.


см. Также этот FAQ об использовании dynamic для конечных точек в Camel http://camel.apache.org/how-do-i-use-dynamic-uri-in-to.html

по существу шаблон EIP для этого является списком получателей.

поэтому в вашем случае он также может быть упрощен до одного EIP

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

помните, что компонент http в Camel полностью синхронен. Если вы хотите сделать запрос / ответ по HTTP и избежать блокировки вызывающего абонента во время ожидания ответного сообщения, то вы можете использовать некоторые другие http-компоненты от Camel, такие как:

  • верблюд-ahc
  • camel-http4
  • верблюд-причал

Я использую Apache camel jetty

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

    }

});

Так вот, когда пользователь нажмите http://localhost:9000/offers тогда конечная точка direct: getOffers будет вызываться

Итак, теперь определение конечной точки getOffers

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

     }

});

здесь другая служба работает на 9008, имея ресурс rest http://localhost:9008/api/v2.0/offers и это тот ресурс, который я пытаюсь потреблять.

Так когда экземпляр верблюда запускает он регистрирует оба маршрута, затем он выполняет обработку, как описано выше

обратите внимание, что важно добавить опцию ?bridgeEndpoint=true для этой работы


вы можете использовать сервис REST от camel с помощью CXFRS Component.Apache camel имеет достаточно информации об этом.

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