【问题标题】:Use multiple channels with the same router在同一个路由器上使用多个通道
【发布时间】:2019-02-06 21:52:43
【问题描述】:

我有多个渠道的 Spring Integration 项目。我希望某些通道输出会到同一个路由器。

例如,对于通道 1,我有:

<int:chain input-channel="channel-1" output-channel="channel-1-out>
    <int:service-activator ref="serviceA" method="doService" />
    <int:service-activator ref="serviceB" method="doService" />
    <int:service-activator ref="serviceC" method="doService" />
</int:chain>

<int:chain input-channel="channel-1-out">
   <int:router>
      <bean class="com.foo.MyClass" />
   </int:router>
 </int:chain>

对于通道 2,我必须复制路由器类:

<int:chain input-channel="channel-2" output-channel="channel-2-out>
    <int:service-activator ref="serviceD" method="doService" />
    <int:service-activator ref="serviceE" method="doService" />
    <int:service-activator ref="serviceF" method="doService" />
</int:chain>

<int:chain input-channel="channel-2-out">
    <int:router>
      <bean class="com.foo.MyClass" />
    </int:router>
</int:chain>

问题在于,对于 10 个不同的通道,我必须编写 10 个不同的路由器,它们都指向同一个路由器类。对我来说,这似乎有点乏味和多余,而且它使 ApplicationContext 变得混乱。

有没有办法简单地将想要的输出添加到同一个路由器?类似的东西

<int:chain input-channel=
                        "channel-1-out" +
                        "channel-2-out" + 
                        "channel-3-out"....>
    <int:router>
      <bean class="com.foo.MyClass" />
    </int:router>
</int:chain>

编辑:

简单的解决方案,将每条链的输出通道设置为路由器输入通道。

<int:chain input-channel="channel-1" output-channel="router>
    <int:service-activator ref="serviceA" method="doService" />
    <int:service-activator ref="serviceB" method="doService" />
    <int:service-activator ref="serviceC" method="doService" />
</int:chain>

<int:chain input-channel="channel-2" output-channel="router>
    <int:service-activator ref="serviceD" method="doService" />
    <int:service-activator ref="serviceE" method="doService" />
    <int:service-activator ref="serviceF" method="doService" />
</int:chain>

<int:chain input-channel="router">
   <int:router>
      <bean class="com.foo.MyClass" />
   </int:router>
</int:chain>

无需声明多个路由器

【问题讨论】:

    标签: java spring-integration


    【解决方案1】:

    目前没有;但我们确实有一个开放的enhancement request

    也就是说,为什么需要声明多个路由器?只需声明一个并将每个链的输出通道设置为其输入通道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2019-10-14
      • 1970-01-01
      相关资源
      最近更新 更多