【问题标题】:Spring integration recipient-list-router issueSpring集成收件人列表路由器问题
【发布时间】:2018-07-12 07:16:31
【问题描述】:

我在我的应用程序中使用收件人列表路由器将消息发送到不同的 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> 

【问题讨论】:

  • 请向我们展示一些 java 代码或您的实现的 XML 配置。否则很难帮你。另外,您是否发现任何异常情况?
  • @Tobias:添加了xml配置
  • 没有例外@Tobias

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


【解决方案1】:

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

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

编辑

我错过了您的第二个问题 - 请使用 ignore-send-failures="true"&gt;

【讨论】:

  • 请同时提及AbstractMessageRouter.ignoreSendFailures。 (我在 gitter 上花了太多时间,所以失去了回答的机会;-))
  • 谢谢@Gary Russell。我做了更改,但不确定表达式是否有效。试图将日志行放入 bean 但不打印。详细检查后会更新。
  • @ArtemBilan 感谢您的努力:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 2018-06-15
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2021-11-23
相关资源
最近更新 更多