Spring Integration收件人列表路由器问题

时间:2018-07-12 07:16:31

标签: spring spring-integration spring-jms jms-topic jmstemplate

我正在应用程序中使用收件人列表路由器,将消息发送到不同的JMS出站适配器,如下所示:

queue -> recipient-list-router  -> queue1 -> JMS outbound adapter 1
                                -> queue2 -> JMS outbound adapter 2

我面临两个问题:

  1. selector-expression仅在最初运行,而不是针对转发的每条消息
  2. 如果任何JMS代理关闭,则消息不会发送到另一个JMS代理。

以下是XML配置:

<i:recipient-list-router input-channel="result-pack-output-channel" >
           <i:recipient channel="result-pack-output-channel-1" 
                          selector-expression="#{utils.isHourInInterval('LN')}"/>
            <i:recipient channel="result-pack-output-channel-2" 
                          selector-expression="#{utils.isHourInInterval('NY')}"/>
            <i:recipient channel="result-pack-output-channel-3" 
                        selector-expression="#{utils.isHourInInterval('HK')}" />
            <i:recipient channel="result-pack-output-channel-4" 
                        selector-expression="#{utils.isHourInInterval('ME')}"/> 
 </i:recipient-list-router> 

1 个答案:

答案 0 :(得分:0)

#{...}表达式在上下文初始化期间被评估一次。在这里,您需要运行时表达式。在运行时表达式中,您用@引用了其他bean-所以...

selector-expression="@utils.isHourInInterval('LN')"

编辑

我想念您的第二个问题-使用ignore-send-failures="true">