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