首页 > 解决方案 > Spring集成收件人列表路由器问题

问题描述

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

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

我面临两个问题:

  1. 选择器表达式仅在最初运行,而不是针对转发的每条消息
  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> 

标签: springspring-integrationspring-jmsjms-topicjmstemplate

解决方案


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

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

编辑

我错过了你的第二个问题 - 使用ignore-send-failures="true">


推荐阅读