我们的申请中有以下Camel路线:
from(webServiceUri).routeId("webServiceRoute")
.unmarshal(jaxb)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
final Message in = exchange.getIn();
final DataRequest body = in.getBody(DataRequest.class);
final DataRequest.Items items = body.getItems();
itemValidator.validate(items.getItem());
getContext().createProducerTemplate().sendBody(importUri, body);
DataResponse response = new DataResponse();
response.setReturnCode(ReturnCode.SUCCESS);
in.setBody(response);
}
})
.marshal(jaxb);
我们希望“webServiceRoute”在处理器验证数据并将消息转发到“importUri”后立即返回响应用户。但是现在似乎在“importUri”交换完成之前,响应不会返回给调用者。所以我的问题是将收到的请求异步转发到另一个队列的“正确”方法是什么? “importUri”交易所不会有任何回复(即它应该是InOnly)。
答案 0 :(得分:1)
您可以用.asyncSendBody(importUri,body)替换.sendBody(importUri,body)。
尽管如此,我发现您的路线对我来说很奇怪,为什么要使用处理器来转发您的信息。我会写一些类似的东西:
DataResponse successResponse = new DataResponse();
response.setReturnCode(ReturnCode.SUCCESS);
from(webServiceUri).routeId("webServiceRoute")
.unmarshal(jaxb)
.bean(WebServiceRouteHelper.class,"validate")
.to(importUri)
.setBody(constant(sucessResponse))
.marshal(jaxb);
class WebServiceRouteHelper {
public DataRequest validate(DataRequest dataRequest) throws Exception {
final DataRequest.Items items = body.getItems();
itemValidator.validate(items.getItem());
return dataRequest;
}
}