Мы имеем следующий маршрут верблюд в нашем приложении:Асинхронное изменение активатора обслуживания EIP?
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).
Согласитесь, что маршрут выглядит странно. Причина для процессора заключалась в том, что параметры itemValidator не были самим запросом, а элементом внутри него, поэтому я «разворачивал» эти данные. Но в конце я решил просто реорганизовать itemValidator, чтобы принять запрос в качестве параметра. – GaZ
Но я не уверен, что то, что вы предложили, решает, что я имел в виду в моем первоначальном вопросе, то есть у нас есть два маршрута (webservice -> import и import -> finish), но даже после того, как обмен был передан импорт, результат не возвращается вызывающему абоненту webservice до тех пор, пока обмен не достигнет «завершения». Я хотел бы, чтобы вызывающий абонент получил сообщение об успешности, как только сообщение было отправлено в importUri. – GaZ
Тогда ваш importUri должен иметь тип [SEDA] (http://camel.apache.org/seda.html) с waitForTaskToComplete = Никогда или JMS с disableReplyTo = true Подробнее о [API верблюда Асин) (http: // camel .apache.org/async.html) –