我在应用程序的不同位置都有这种链条:
<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
答案 0 :(得分:0)
您不清楚您的担忧,因为这是预期的行为:默认情况下使用filter
时,仅丢弃一条消息。
不确定版本3.0.x
中预期的行为或声称的行为是否正常,但是根据我的配置,我猜您在一开始就拥有一个消息传递网关,因此您会期望{{1 }}。当然,当您在过滤器级别不执行任何操作时,这是不可能的。
您使用<chain>
做的是正确的解决方案。
discard-channel
和throw-exception-on-rejection="true"
上的error-channel
可能有另一个选择,可以在那里捕获那些丢弃的消息并重新发送作为回复。
注意:Spring集成<gateway>
已不在支持范围内。如果无法升级到4.2
,建议至少升级到4.3.x
:https://spring.io/projects/spring-integration#learn