#mule
#mule
Вопрос:
У меня есть 2 потока, A.flow и B.flow, в конечном итоге оба потока выполняют один и тот же класс Java.
A amp; B считываются из отдельной очереди.
Я хочу синхронизировать потоки так, чтобы, если оба потока получали входные данные одновременно, тогда один поток обрабатывался одновременно, и после его завершения другой поток начнет обработку.
Есть идеи?
Спасибо
Комментарии:
1. Когда вы говорите «потоки обрабатывают один и тот же класс Java», вы имеете в виду, что полезная нагрузка сообщения сообщения содержит тот же объект java (экземпляр класса) или что он использует тот же экземпляр объекта java в качестве процессора в потоке? Возможно, вы могли бы прояснить свой вопрос с помощью некоторого примера flow XML.
Ответ №1:
Используйте объединенный компонент и настройте его на одновременное использование одного потока:
<flow name="A">
<jms:inbound-endpoint...>
...
<vm:outbound-endpoint path="process"/>
...
</flow>
<flow name="B">
<jms:inbound-endpoint...>
...
<vm:outbound-endpoint path="process"/>
...
</flow>
<flow name="process">
<vm:inbound-endpoint path="process"/>
<pooled-component class="org.my.PrototypeObject">
<pooling-profile exhaustedAction="WHEN_EXHAUSTED_WAIT" initialisationPolicy="INITIALISE_ALL" maxActive="1" maxIdle="1" maxWait="1000" /> </pooled-component>
</pooled-component>
</flow>
Комментарии:
1. Этот компонент должен быть в третьем потоке (не подпотоке), на который ссылаются потоки A и B, верно?