0

如何在 spring-integration 中与接收者列表路由器实现并行处理。

我的目标是路由器必须是基于内容的,并且像多播一样在并行处理上向各种通道发送消息。我尝试使用骆驼弹簧集成在骆驼中进行多播,但无法将其配置为基于内容

如果有什么可以做的,请帮忙

谢谢

4

2 回答 2

1

如果我理解的问题是正确的,你只需要使用发布订阅通道作为路由器的输出通道。路由器将根据内容将消息定向到正确的 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 节复制而来的。

于 2013-07-11T08:31:53.140 回答
0

我通过扩展 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>
于 2013-07-16T05:34:32.583 回答