任何人都可以告诉我下面的代码段是否可行?我希望能够在不知道特定输出通道的情况下路由到任意数量的收件人。其他人会定义它,我的过程只需要路由到它。
<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>
我知道我可以使用标头值路由器并让消息创建者填充它但我更愿意自己找到它。有很多地方我想使用表达式来定义输出通道,但在大多数情况下似乎不可能。我可以通过使用“destination-expression”属性与jms通道适配器进行类似的操作的一个例子,我也希望在路由器上应用相同类型的进程。
答案 0 :(得分:4)
右。使用RecipientListRouter
或甚至任何Mapping路由器都无法实现,因为您的“愿望”打破了“映射”原则。
但是,当您提供POJO及其方法时,通用路由器(RouterFactoryBean
)可以应用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;
}