Как отправить ответ вызывающему сервису, не доходя до конца конвейера - PullRequest
1 голос
/ 29 марта 2012

У меня есть 2 пользовательских действия, выполняемые одно за другим в одном и том же сервисе, подобном этому

<actions mep="RequestResponse">
    <action name="ActionA" class="ClassA"/>
    <action name="ActionB" class="ClassB"/>
</actions>

Предположим, что ActionA выполняет некоторые проверки по полученному сообщению. Если проверки показали, что сообщение является недействительным, как вы отправляете ответ вызывающему об этом сбое?

Прямо сейчас в своих действиях я установил ответ в сообщении на ActionA и поставил в нем отметку, указывающую, что я обнаружил ошибку в ActionA и проверках ActionB на эту отметку перед выполнением его кода. Я нашел этот метод полезным, но обременительным, потому что все мои действия должны начинаться с:

if (!markIspressent) {
    //Code goes here
}
return message.

Я попытался установить ответное сообщение в ActionA и вернуть null, чтобы остановить конвейер, но это не работает. Я также попробовал другой метод, который я нашел, бросая ActionProcessingFaultException(message,"SomeTextGoesInHere"), но он также не работает. Моя главная проблема с этим вторым состоит в том, что ESB пытается повторно обработать сообщение, которое выдало это исключение, и я не вижу ответ, который я установил в сообщении, пока ESB не сдастся и не отправит его обратно. Но это сдача занимает до 60-х годов.

Поэтому мой вопрос заключается в том, как вы можете отправить ответное сообщение сообщателю, прежде чем достигнуть конца конвейера службы.

Спасибо

1 Ответ

3 голосов
/ 08 июня 2012

Варианты окончательной отделки трубопровода: - вернуть ноль; - разделите службу на три (обратите внимание, что служба 1 - это OneWay, и в зависимости от маршрутов результатов вашего действия к соответствующей службе) Сервис 1

<actions mep="OneWay">
    <action name="ActionA" class="ClassA"/>
    <action name="ActionA1" class="RouteBasedOnMsgContentTo(Service 2 or Service 3)"/>
</actions>

Сервис 2

<actions mep="RequestResponse">
    <action name="ActionB" class="ClassB"/>
</actions>

Сервис 3

<actions mep="RequestResponse">
    <action name="ActionC" class="ClassC-SimplyRespondsTheProblem"/>
</actions>
...