2014-01-30 1 views
0

Camel 2.11.0 здесь. У меня есть следующие Camel маршруты:Camel Multicast не работает

<route id="main-route"> 
    <from uri="timer://runOnce?repeatCount=1&amp;delay=10" /> 

    <to uri="bean:loggingBean?method=main" /> 

    <to uri="bean:processorBean?method=doSomething" /> 

    <to uri="bean:loggingBean?method=afterProcessing" /> 

    <multicast> 
     <to uri="direct:validator" /> 
     <to uri="direct:rejector" /> 
    </multicast> 
</route> 

<route id="validator-route"> 
    <from uri="direct:validator" /> 
    <to uri="bean:loggingBean?method=validator" /> 
</route> 

<route id="rejector-route"> 
    <from uri="direct:rejector" /> 
    <to uri="bean:loggingBean?method=rejector" /> 
</route> 

... где loggingBean выглядит следующим образом:

public class LoggingBean { 
    public void main(Exchange e) { 
     System.out.println("Starting main route..."); 
    } 

    public void afterProcessing(Exchange e) { 
     System.out.println("Processing input..."); 
    } 

    public void validator(Exchange e) { 
     System.out.println("In validator route..."); 
    } 

    public void rejector(Exchange e) { 
     System.out.println("In rejector route..."); 
    } 
} 

Когда я запускаю этот код, я получаю следующий вывод на консоль:

Starting main route... 
Processing input... 
In validator route... 

Потому что мы multi -casting здесь, я бы ожидал, что он также включит выход отклонителя и будет выглядеть так:

Starting main route... 
Processing input... 
In validator route... 
In rejector route... 

Похоже, что Multicaster отправляет только первый элемент, вложенный внутри него (в Spring XML), а не второй. Хммм, интересно. Затем я изменил <multicast> элемент выглядеть следующим образом:

<multicast> 
    <to uri="direct:rejector" /> 
    <to uri="direct:validator" /> 
</multicast> 

На этот раз, вывод консоли выглядит следующим образом:

Starting main route... 
Processing input... 
In rejector route... 

Итак, это подтвердили: <multicast> только транслирует обмен на первый дочерний элемент, указанный под ним. Почему и как я могу это исправить?

+0

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

+0

Я бы попробовал обновить до последней стабильной версии ветки выпуска 2.11 (2.11.2), а затем повторите попытку. – Ralf

ответ

1

multicast определенно посылает ко всем конечным точкам ... Я не знаю, почему его не основано на вашем примере

увидеть эти модульные тесты, которые делают в основном то же самое:

https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringMulticastTest.java

который использует этот маршрут:

https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/multicast.xml

+0

Спасибо @boday (+1) - в интересах экономии времени, есть ли способ определить мой собственный Java-процессор «Процессор» и заставить его делать то же самое, что и я, пытаясь заставить мультикастер? Мне нужно взять 'exchange.getIn()' и отправить его в 'direct: validator', а затем' direct: rejector'. Мысли? Не могли бы вы разместить пример кода? Еще раз спасибо! – AdjustingForInflation

+0

Или, если это не так, возможно, есть другой способ отправить обмен на обе конечные точки? Они не * * отправляют в то же самое время; Я мог бы послать сообщение 'direct: validator' и * then *' direct: rejector', если нужно ... – AdjustingForInflation

+0

«direct: validator' меняет тело сообщения? поскольку, если нет, я не думаю, что вам нужно использовать многоадресную рассылку вообще ... – vikingsteve

1

I т Заинтересованное ваши маршруты и все работало, как ожидалось:

<multicast> 
    <to uri="direct:rejector" /> 
    <to uri="direct:validator" /> 
</multicast> 

Это журналы

Starting main route... 
Processing input... 
In rejector route... 
In validator route... 

И с

<multicast> 
    <to uri="direct:validator" /> 
    <to uri="direct:rejector" /> 
</multicast> 

Это журналы

Starting main route... 
Processing input... 
In validator route... 
In rejector route... 

Возможно, вы читаете неправильно Camel конфигурация?