首页 > 解决方案 > 聚合器的 Spring Integration 迁移问题

问题描述

我正在将我的旧应用程序从 Spring Integration (SI) 从 4.3.8 移动到 5.2.6。(而且我使用 Spring Boot ver #2.2.7)在我的一些路线中,我有以下链:

<int:chain id="answersChain" input-channel="answersChannel">
        <int:header-enricher>
            <int:header name="route" expression="@config.get(payload.name)"
                        type="com.model.Route"/>
        </int:header-enricher>
        <int:aggregator discard-channel="unmatchedAnswersChannel"
                        group-timeout-expression="size() ge 2 ? 0 : one.headers['route']?.timeout"
                        expire-groups-upon-completion="true"
                        send-partial-result-on-expiry="false"
                        correlation-strategy-expression="payload.correlKey"
                        release-strategy-expression="size() == 2 and !#this[1].payload.sysReply"
                        expression="#this[1]"
        />
        <int:router expression="headers['route'].source.channelName"/>
</int:chain>

实际上,代码和 SI 布局都包含单元测试。针对 4.3.8 版运行单元测试很好。但是针对 SI 版本 5.2.6 运行相同的测试失败。似乎最后一个'int:router'根本没有被调用。至少我看不到它在日志中被调用,因为我看到它在 SI 版本下运行。4.3.8。当单元测试失败时 - 没有任何东西被丢弃到丢弃通道中。看起来这个聚合器的行为就像一个黑洞。

我需要澄清两个问题:

  1. SI 版本中是否有任何关键更新/错误。5.2.6 引起的问题?
  2. 如何调试我的布局?到目前为止,我在调试下使用了不同的存根,但也许有一些更方便的方法?

提前感谢您的帮助

标签: spring-bootspring-integration

解决方案


在“跟踪”日志记录下,我看到该问题在我的应用程序的其他地方。实际上,到目前为止,对于 SI 聚合器逻辑还没有任何要求。


推荐阅读