Обработка исключений в потоках Mule ESB: несколько стратегий исключений

Я хочу добавить обработку исключений в Mule ESB, используя стратегию пользовательского исключения. Однако у меня есть несколько вызовов службы в одном потоке, и я хочу обрабатывать исключения из каждого вызова службы отдельно.

Возможно ли иметь несколько стратегий пользовательских исключений в одном потоке? Прямо сейчас я могу использовать только одну стратегию пользовательского исключения и только тогда, когда я помещаю ее в конец потока, после последней исходящей конечной точки. Это ожидаемое поведение. Хорошо. Но я хочу использовать несколько стратегий исключений в потоке.

В документации Mulesoft говорится, что мы должны использовать цепочки процессоров, если хотим использовать несколько стратегий исключений. Я не уверен, как это будет переведено в XML конфигурации. Любое руководство?


person r3st0r3    schedule 03.05.2012    source источник


Ответы (1)


Для этого вам необходимо поместить вызовы различных служб в приватные потоки.

Что-то типа:

<flow name="main">
    <inbound-endpoint ref="in" />
    <flow-ref name="sub1" />
    <flow-ref name="sub2" />
</flow>

<flow name="sub1" processingStrategy="synchronous">
    <!-- do something -->
    <custom-exception-strategy>
        <!-- sub1 specific -->
    </custom-exception-strategy>
</flow>

<flow name="sub2" processingStrategy="synchronous">
    <!-- do something -->
    <custom-exception-strategy>
        <!-- sub2 specific -->
    </custom-exception-strategy>
</flow>
person David Dossot    schedule 03.05.2012
comment
Ой ну спасибо. После нескольких испытаний я понял, что абсолютно невозможно поместить более одной стратегии исключений в один поток. Сейчас попробую этот стиль. Хотя, еще одно. Скажем, я помещаю что-то в область сеанса в приватном потоке sub1 выше. (Как мне) или (Мне получить) доступ к нему в следующем частном потоке sub2? - person r3st0r3; 04.05.2012
comment
Я проверил и могу подтвердить, что свойства сеанса, добавленные в sub1, доступны в sub2. В зависимости от контекста, но одним из способов доступа к такому свойству сеанса является выражение: #[header:SESSION:fromSub1]. - person David Dossot; 04.05.2012
comment
Спасибо @David. Я могу получить доступ к свойствам сеанса, как вы показали там. Теперь я также могу получить к ним доступ внутри XSLT-преобразователя, передав его преобразователю в качестве контекстного свойства. Спасибо. - person r3st0r3; 06.05.2012