Spring Integration迁移问题

时间:2018-07-10 14:20:20

标签: spring filter migration spring-integration

我在应用程序的不同位置都有这种链条:

<int:chain input-channel="updateAdministratorChannel">
    <int:filter expression="payload.isAdministatorPublished"/>
    <int:service-activator expression="..."/>
    <int:gateway request-channel="mergeEntityChannel"/>
    <int:logging-channel-adapter logger-name="..." expression="'...'"/>
</int:chain>

Spring Integration版本3.0.1.RELEASE一切正常。我们决定迁移到4.2.x版本,并且过滤器出现问题:当条件为false时,系统挂起(直到我认为超时)。 最后,我必须添加一个废弃通道并像这样修改我的链:

<int:chain input-channel="updateAdministratorChannel">
    <int:filter expression="payload.isAdministatorPublished" discard-channel="defaultDiscardChannel"/>
    <int:service-activator expression="..."/>
    <int:gateway request-channel="mergeEntityChannel"/>
    <int:logging-channel-adapter logger-name="..." expression="'...'"/>
</int:chain>

<int:header-value-router input-channel="defaultDiscardChannel" header-name="replyChannel"/>

我已经读过Migration Guides,但对此一无所获。 我错过了什么吗?

Spring version : 4.2.5.RELEASE
Spring Integration version : 4.2.6.RELEASE

1 个答案:

答案 0 :(得分:0)

您不清楚您的担忧,因为这是预期的行为:默认情况下使用filter时,仅丢弃一条消息。

不确定版本3.0.x中预期的行为或声称的行为是否正常,但是根据我的配置,我猜您在一开始就拥有一个消息传递网关,因此您会期望{{1 }}。当然,当您在过滤器级别不执行任何操作时,这是不可能的。

您使用<chain>做的是正确的解决方案。

discard-channelthrow-exception-on-rejection="true"上的error-channel可能有另一个选择,可以在那里捕获那些丢弃的消息并重新发送作为回复。

注意:Spring集成<gateway>已不在支持范围内。如果无法升级到4.2,建议至少升级到4.3.xhttps://spring.io/projects/spring-integration#learn