Как я могу вызвать 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 Заголовок, прежде чем добраться до этой части маршрута.

См. Также этот раздел часто задаваемых вопросов об использовании динамических конечных точек в 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
  • верблюжьей 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 offer, будет вызвана конечная точка 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 с ресурсом отдыха http://localhost:9008/api/v2.0/offers, и это ресурс, который я пытаюсь использовать.

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

Примечание. Для этого важно добавить параметр? BridgeEndpoint=true.

Вы можете использовать REST сервис от верблюда, используя CXFRS ComponentУ верблюда апача достаточно информации об этом.

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

Другие вопросы по тегам