Я пытаюсь использовать агрегатор коллекций Mule 3.2.0 s. Я пытался использовать Mule Studio, но кажется, что он по-прежнему недоступен в Mule studio для настройки, хотя значок появляется в разделе «Управление потоком». Мой вариант использования: я получаю сообщение от конечной точки входящего трафика виртуальной машины. Теперь я хочу передать это трем разным потокам — все они используют один и тот же объект запроса, но выполняют разные операции — скажем, A, B, C. Все они обновляют свои соответствующие базы данных, но все они являются частью общего Order_ID (что-то внутри нашего приложения). 3 процесса могут занимать разное время обработки, но после завершения каждый из них возвращает один и тот же ответ об успешном завершении. Я хочу использовать агрегатор, который будет агрегировать все эти ответы без тайм-аута, а затем перенаправлять их в компонент Java или другую конечную точку виртуальной машины для дальнейшей обработки. Документация Mule для агрегатора коллекций не кажется очень информативной, поэтому, если кто-то, кто использовал Collection Agg, может помочь мне с конфигурацией xml для описанного выше сценария, это будет очень полезно.
Агрегатор коллекций мулов
Ответы (2)
Вместо Collection Aggregator
используйте 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
Спасибо Даниэль. Я предполагаю, что вы имеете в виду этот бит в приведенной выше ссылке — все сообщения (если они есть), возвращаемые целями, объединяются вместе и формируют ответ от этого процессора. Однако на самом деле это не сработало со ВСЕМИ. На самом деле я использую ALL в данный момент, и он просто пересылает сообщение всем им, и они умирают в конце своих соответствующих потоков. Если я добавлю еще один Java-компонент после ВСЕХ, он будет вызван, как только сообщения будут доставлены на 3 ВСЕ цели, и на самом деле не будет ждать ответа от 3. У вас есть образец конфигурации? Спасибо
- person Soumya; 15.08.2012
Вероятно, это связано с тем, что способ вызова потоков A, B и C из ALL является асинхронным (т. е.
one-way
).
- person David Dossot; 15.08.2012
Обновил мой ответ образцом конфигурации, он отлично работает. Можете ли вы предоставить более подробную информацию о конфигурации ваших потоков?
- person Daniel; 16.08.2012
Спасибо Даниэль. Немного отвлекся на какую-то работу. Я попробую это через день, вернусь и обновлю. ваше здоровье
- person Soumya; 17.08.2012
Я бы использовал ВСЕ компоненты, а конечная точка, которую вы используете, должна быть запрос-ответ (двусторонний, где поток ожидает ответа).
Таким образом, компонент ALL агрегирует ответ, а затем возвращает вам CopyOnWriteArrayList со всеми ответами из потоков A, B и C. Этот список Array вы можете преобразовать любым желаемым способом, используя пользовательский преобразователь, расширив AbstractTransformer в вашем классе java.
Привет, Навин Радж
person
Naveen Raj
schedule
13.09.2013