Apache Camel:如何并行发送两个http请求并等待响应?
问题描述:
在我正在定义路由的Apache Camel中,如何并行发送两个或多个http请求并等待它们的未来"以获取响应,以便像在Java中使用AsyncHttpClient进行进一步处理?
In Apache Camel, where I am defining a route, how can I send two or more http requests in parallel and wait on their 'futures'to get the responses for further processing like in Java with AsyncHttpClient?
AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient();
Future<Response> f = asyncHttpClient.prepareGet("http://www.example.com/").execute();
Response r = f.get();
就上下文而言,以下路由调用GET联系人http调用并同步返回响应.
Just for the context, the following route calls the GET contacts http call and returns the response synchronously.
from("direct:getContact")
.to("http://host:port/contacts/1453")
答
尝试将您的路线分成许多较小的路线.然后,您可以在那里进行必要的解组.
Try to split You route into many smaller routes. Then You can perform necessary unmarshalling there.
请参见
from("direct:getContact")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
CamelContext context = exchange.getContext();
ProducerTemplate producerTemplate = context.createProducerTemplate();
// Asynchronous call to internal route
Future<Contact> contact =
producerTemplate.asyncRequestBody("direct:invokeSomeRestApi", null, Contact.class);
// Do rest of the work
exchange.getOut().setBody(contact.get());
}
});
// Unmarshalling REST response
JacksonDataFormat jacksonDataFormat = new JacksonDataFormat();
jacksonDataFormat.setUnmarshalType(Contact.class);
// Internal route definition
from("direct:invokeSomeRestApi")
.to("http://localhost:8080/api/contact/2345")
.unmarshal(jacksonDataFormat);