此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1spring-doc.cadn.net.cn

处理消息通知

本节简介中所述,请求处理程序通知链中的通知对象仅应用于当前端点,而不是下游流(如果有)。 为MessageHandler生成回复的对象(例如扩展AbstractReplyProducingMessageHandler),建议应用于内部方法:handleRequestMessage()(从MessageHandler.handleMessage()). 对于其他消息处理程序,建议应用于MessageHandler.handleMessage().spring-doc.cadn.net.cn

在某些情况下,即使消息处理程序是AbstractReplyProducingMessageHandler,则该建议必须应用于handleMessage方法。 例如,幂等接收器可能会返回null,如果处理程序的replyRequired属性设置为true. 另一个例子是BoundRabbitChannelAdvice— 请参阅严格消息排序spring-doc.cadn.net.cn

从 4.3.1 版本开始,新的HandleMessageAdvice接口及其基本实现 (AbstractHandleMessageAdvice)已被引入。Advice实现HandleMessageAdvice始终应用于handleMessage()方法,而不管处理程序类型如何。spring-doc.cadn.net.cn

重要的是要了解这一点HandleMessageAdvice实现(例如幂等接收器)在应用于返回响应的处理程序时,与adviceChain并正确应用于MessageHandler.handleMessage()方法。spring-doc.cadn.net.cn

由于这种分离,建议链命令不被遵守。

请考虑以下配置:spring-doc.cadn.net.cn

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

在前面的示例中,<tx:advice>应用于AbstractReplyProducingMessageHandler.handleRequestMessage(). 然而myHandleMessageAdvice申请MessageHandler.handleMessage(). 因此,在<tx:advice>. 要保留顺序,您应该遵循标准的 Spring AOP 配置方法并使用端点id.handler后缀获取目标MessageHandler豆。 请注意,在这种情况下,整个下游流都在事务范围内。spring-doc.cadn.net.cn

MessageHandler不返回响应的,则保留通知链顺序。spring-doc.cadn.net.cn

从 5.3 版开始,HandleMessageAdviceAdapter提供以应用任何MethodInterceptor对于MessageHandler.handleMessage()方法,因此,整个子流。 例如,一个RetryOperationsInterceptor可以应用于从某个端点开始的整个子流;默认情况下,这是不可能的,因为使用者端点仅将通知应用于AbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage().spring-doc.cadn.net.cn