如何在 spring-integration 中与接收者列表路由器实现并行处理。
我的目标是路由器必须是基于内容的,并且像多播一样在并行处理上向各种通道发送消息。我尝试使用骆驼弹簧集成在骆驼中进行多播,但无法将其配置为基于内容
如果有什么可以做的,请帮忙
谢谢
如何在 spring-integration 中与接收者列表路由器实现并行处理。
我的目标是路由器必须是基于内容的,并且像多播一样在并行处理上向各种通道发送消息。我尝试使用骆驼弹簧集成在骆驼中进行多播,但无法将其配置为基于内容
如果有什么可以做的,请帮忙
谢谢
如果我理解的问题是正确的,你只需要使用发布订阅通道作为路由器的输出通道。路由器将根据内容将消息定向到正确的 pubsub 通道,然后订阅该通道的所有处理程序将并行执行,假设输出通道任务执行器配置为具有多个线程。
<int:publish-subscribe-channel id="channel1" task-executor="someExecutor"/>
<int:publish-subscribe-channel id="channel2" task-executor="someExecutor"/>
<int:recipient-list-router id="customRouter" input-channel="routingChannel">
<int:recipient channel="channel1" selector-expression="payload.equals('foo')"/>
<int:recipient channel="channel2" selector-expression="headers.containsKey('bar')"/>
</int:recipient-list-router>
上面的收件人列表路由器配置是从 Spring Integration 参考手册的 5.1 节复制而来的。
我通过扩展 Spring-Integrations 的RecipientListRouter实现了类似的要求,如下所示:
public class CententBasedRecipientListRouter extends RecipientListRouter {
@Override
protected void handleMessageInternal(final Message<?> message) {
......
}
}
在覆盖方法中,您可以根据您的要求实现任何基于内容的自定义路由逻辑。
这个自定义路由器可以配置如下:
<bean id="customRecipientListRouter" class="CententBasedRecipientListRouter">
<property name="channels">
<list>
<ref bean="parallelProcessingChannel1"/>
<ref bean="parallelProcessingChannel2"/>
<ref bean="parallelProcessingChannel3"/>
</list>
</property>
</bean>
<int:router ref="customRecipientListRouter"
input-channel="routingChannel"
default-output-channel="errorChannel" />
为了实现并行处理,您可以拥有如下任务执行器通道:
<int:channel id="parallelProcessingChannel1">
<int:dispatcher task-executor="threadPoolExecutor"/>
</int:channel>