2014-02-04 3 views
0

Может ли кто-нибудь сказать мне, возможно ли сниппет? Я хотел бы иметь возможность маршрутизировать любое количество получателей, зная специфический канал. кто-то другой определял бы его, и мой процесс просто должен был бы направить его.Весна интеграция динамический получатель из канала

<recipient-list-router id="componentRouter" input-channel="routingChannel" 
     default-output-channel="router-out-channel-1" 
     resolution-required="false"> 
    <recipient channel="router-out-channel-${the selector expression}" selector-expression="payload.getChannel().contains('2')" /> 
</recipient-list-router> 

Я знаю, что я мог бы использовать маршрутизатор с заголовком и иметь источник сообщения, заполняющий его, но я бы предпочел найти его сам. есть несколько мест, которые я бы хотел использовать для определения выходного канала, но в большинстве случаев это кажется невозможным. один пример, где я могу сделать что-то похожее на это с адаптером канала jms, используя атрибут «destination-expression», и я хотел бы применить такой же процесс к маршрутизатору.

ответ

4

Право. Это невозможно с RecipientListRouter или даже с любым Маршрутизатором, потому что ваше «желание» нарушает принцип «сопоставления».

Однако общий маршрутизатор (RouterFactoryBean), когда вы предоставляете POJO и его метод, может применять список MessageChannel. Что-то вроде этого:

<int:router input-channel="input" ref="myRouter" method="route"/> 


public List<String> route(Message<?> message) { 
     List<String> results = new ArrayList<String>(); 
     if (message.getPayload().equals("foo") || message.getPayload().equals("bar")) { 
      results.add("foo-channel"); 
      results.add("bar-channel"); 
     } 
     return results; 
    } 
Смежные вопросы