java动态调用Spring集成转换器
我是Spring integration的新手,正在从事一个SI项目。我正在做一个简单的工作,从一个通道(来自适配器)获取消息,调用一个转换器,并将输出发送到另一个通道(toQueue)。以下代码用于SI配置文件----
<int:channel id="fromAdapter"></int:channel>
<int:channel id="toQueue">
</int:channel>
<bean id="trans" class="src.MyTransformer"></bean>
<int:transformer input-channel="fromAdapter" output-channel="toQueue" ref="trans"></int:transformer>
然而,现在我有一个稍微复杂的要求。根据消息的某个值,我希望将消息发送到6个变压器中的任意一个,而不是总是将消息发送到一个变压器。如何实现这一点
# 1 楼答案
您可以将这6个转换器声明为单个点对点通道的订户,默认情况下,它将使用循环调度策略(它将仅为每条消息调用一个转换器,但它将始终选择列表中的下一个转换器,然后循环)
在您的情况下,您只需声明所有这些变压器使用完全相同的输入和输出通道,上述情况就会自动发生
要根据消息的某些属性选择转换器,可以使用
recipient-list-router
并为列表中的每个recipient
定义一个selector-expression
,以便匹配特定类型的消息。此外,对于每个收件人,您应该使用不同的频道名称。然后,这些通道中的每一个都将被用作所需变压器的输入:请记住,使用这种方法,一条消息可以匹配多个选择器表达式,因此由您提供互斥表达式
或者,如果您愿意编写一些基础结构代码,您可以编写自己的
LoadBalancingStrategy
实现,并将其提供给点对点通道。然后,您的策略将负责为每条消息选择正确的处理程序