Стратегии обработки Mule — вызов асинхронного частного потока из синхронного потока

Я пытаюсь вызвать асинхронный частный поток из основного синхронного потока следующим образом:

<flow name="main" doc:name="main" processingStrategy="synchronous">
    <poll frequency="10000">
        <set-payload value="main"></set-payload>
    </poll>

    <flow-ref name="async-private" />
    <flow-ref name="private" />

</flow>
<flow name="private" processingStrategy="synchronous">
    <logger level="ERROR" message="sync" />
</flow>

<flow name="async-private" processingStrategy="asynchronous">
    <logger level="ERROR" message="async" />
</flow>

Но это не работает и приводит к следующему исключению:

Невозможно асинхронно обработать синхронное событие. Полезная нагрузка сообщения имеет тип: String (org.mule.api.MessagingException).

Что здесь происходит?

ОБНОВЛЕНИЕ

Это работает, если я оборачиваю асинхронную ссылку потока в теги <async>. Но зачем мне это делать? Это ошибка?


person jon lee    schedule 24.02.2014    source источник


Ответы (1)


Это особенность.

Вы находитесь в явно синхронном потоке и пытаетесь вызвать явно асинхронный. Ответ от асинхронного потока никогда не вернется к вызывающему потоку. Таким образом, существует вероятность потери сообщений. Таким образом, Mule заставляет вас быть явным и использовать теги <async>.

person David Dossot    schedule 24.02.2014
comment
FWW Я добавляю это как комментарий, потому что мне не нравится самореклама, но это поведение подробно описано в главе 2 второго издания Mule in Action. - person David Dossot; 25.02.2014