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