Агрегатор коллекций мулов

Я пытаюсь использовать агрегатор коллекций Mule 3.2.0 s. Я пытался использовать Mule Studio, но кажется, что он по-прежнему недоступен в Mule studio для настройки, хотя значок появляется в разделе «Управление потоком». Мой вариант использования: я получаю сообщение от конечной точки входящего трафика виртуальной машины. Теперь я хочу передать это трем разным потокам — все они используют один и тот же объект запроса, но выполняют разные операции — скажем, A, B, C. Все они обновляют свои соответствующие базы данных, но все они являются частью общего Order_ID (что-то внутри нашего приложения). 3 процесса могут занимать разное время обработки, но после завершения каждый из них возвращает один и тот же ответ об успешном завершении. Я хочу использовать агрегатор, который будет агрегировать все эти ответы без тайм-аута, а затем перенаправлять их в компонент Java или другую конечную точку виртуальной машины для дальнейшей обработки. Документация Mule для агрегатора коллекций не кажется очень информативной, поэтому, если кто-то, кто использовал Collection Agg, может помочь мне с конфигурацией xml для описанного выше сценария, это будет очень полезно.


person Soumya    schedule 14.08.2012    source источник


Ответы (2)


Вместо Collection Aggregator используйте All обработчик сообщений. Он отправляет одно и то же сообщение каждому процессору внутри него и агрегирует результаты после их завершения.

http://www.mulesoft.org/documentation/display/MULE3USER/Routing+Message+Processors#RoutingMessageProcessors-All

Пример конфигурации: (я отправляю «foo» на конечную точку vm)

<flow name="main" processingStrategy="asynchronous">
    <vm:inbound-endpoint path="in"/>
    <all>
        <flow-ref name="flow1"/>
        <flow-ref name="flow2"/>
    </all>

    <logger message="#[payload:]" level="INFO"/>
</flow>

<flow name="flow1">
    <append-string-transformer message="bar1"/>
</flow>

<flow name="flow2">
    <append-string-transformer message="bar2"/>
</flow>

Вывод консоли:

INFO  2012-08-15 17:26:01,749 [main.stage1.02] org.mule.api.processor.LoggerMessageProcessor: [foobar1, foobar2]

ХТН

person Daniel    schedule 14.08.2012
comment
Спасибо Даниэль. Я предполагаю, что вы имеете в виду этот бит в приведенной выше ссылке — все сообщения (если они есть), возвращаемые целями, объединяются вместе и формируют ответ от этого процессора. Однако на самом деле это не сработало со ВСЕМИ. На самом деле я использую ALL в данный момент, и он просто пересылает сообщение всем им, и они умирают в конце своих соответствующих потоков. Если я добавлю еще один Java-компонент после ВСЕХ, он будет вызван, как только сообщения будут доставлены на 3 ВСЕ цели, и на самом деле не будет ждать ответа от 3. У вас есть образец конфигурации? Спасибо - person Soumya; 15.08.2012
comment
Вероятно, это связано с тем, что способ вызова потоков A, B и C из ALL является асинхронным (т. е. one-way). - person David Dossot; 15.08.2012
comment
Обновил мой ответ образцом конфигурации, он отлично работает. Можете ли вы предоставить более подробную информацию о конфигурации ваших потоков? - person Daniel; 16.08.2012
comment
Спасибо Даниэль. Немного отвлекся на какую-то работу. Я попробую это через день, вернусь и обновлю. ваше здоровье - person Soumya; 17.08.2012

Я бы использовал ВСЕ компоненты, а конечная точка, которую вы используете, должна быть запрос-ответ (двусторонний, где поток ожидает ответа).

Таким образом, компонент ALL агрегирует ответ, а затем возвращает вам CopyOnWriteArrayList со всеми ответами из потоков A, B и C. Этот список Array вы можете преобразовать любым желаемым способом, используя пользовательский преобразователь, расширив AbstractTransformer в вашем классе java.

Привет, Навин Радж

person Naveen Raj    schedule 13.09.2013