对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

本节简介中所述,请求处理程序建议链中的建议对象仅应用于当前终结点,而不应用于下游流(如果有)。 对于生成回复的对象(例如扩展的对象),建议应用于内部方法:(从 调用)。 对于其他消息处理程序,该建议适用于 。MessageHandlerAbstractReplyProducingMessageHandlerhandleRequestMessage()MessageHandler.handleMessage()MessageHandler.handleMessage()Spring中文文档

在某些情况下,即使消息处理程序是 ,也必须将建议应用于该方法。 例如,幂等接收器可能会返回 ,如果处理程序的属性设置为 ,则会导致异常。 另一个例子是 — 请参阅严格消息排序AbstractReplyProducingMessageHandlerhandleMessagenullreplyRequiredtrueBoundRabbitChannelAdviceSpring中文文档

从版本 4.3.1 开始,引入了一个新接口及其基本实现 ()。 无论处理程序类型如何,实现的对象始终应用于方法。HandleMessageAdviceAbstractHandleMessageAdviceAdviceHandleMessageAdvicehandleMessage()Spring中文文档

重要的是要了解,当应用于返回响应的处理程序时,实现(例如幂等接收器)将与方法分离并正确应用于方法。HandleMessageAdviceadviceChainMessageHandler.handleMessage()Spring中文文档

由于这种分离,建议链顺序不被遵守。
由于这种分离,建议链顺序不被遵守。

请考虑以下配置:Spring中文文档

<some-reply-producing-endpoint ... >
    <int:request-handler-advice-chain>
        <tx:advice ... />
        <ref bean="myHandleMessageAdvice" />
    </int:request-handler-advice-chain>
</some-reply-producing-endpoint>

在前面的示例中,将应用于 . 但是,适用于. 因此,它在 . 要保留顺序,您应该遵循标准的 Spring AOP 配置方法,并使用端点和后缀来获取目标 Bean。 请注意,在这种情况下,整个下游流都在事务范围内。<tx:advice>AbstractReplyProducingMessageHandler.handleRequestMessage()myHandleMessageAdviceMessageHandler.handleMessage()<tx:advice>id.handlerMessageHandlerSpring中文文档

如果 a 未返回响应,则保留建议链顺序。MessageHandlerSpring中文文档

从版本 5.3 开始,提供了将 any 应用于该方法,从而应用于整个子流。 例如,可以将 a 应用于从某个端点开始的整个子流;默认情况下,这是不可能的,因为使用方终结点仅将建议应用于 .HandleMessageAdviceAdapterMethodInterceptorMessageHandler.handleMessage()RetryOperationsInterceptorAbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage()Spring中文文档