|
对于最新稳定版本,请使用 Spring Integration 7.0.0! |
消息处理建议
正如本节引言所述,请求处理程序建议链中的建议对象仅应用于当前端点,而非下游流(如果有的话)。
为消息处理器产生回复的对象(例如扩展对象)摘要回复制作消息处理器),建议应用于内部方法:handleRequestMessage()(从中MessageHandler.handleMessage()).
对于其他消息处理者,建议适用于MessageHandler.handleMessage().
在某些情况下,即使消息处理器是摘要回复制作消息处理器,建议必须应用于handleMessage方法。
例如,幂冪元接收者可能会返回零,如果操作员的回复必需属性设置为true.
另一个例子是BoundRabbit频道建议——参见严格消息排序。
从4.3.1版本开始,一个新的HandleMessageAdvice接口及其基础实现(摘要 HandleMessageAdvice)已经被引入。建议实现的对象HandleMessageAdvice总是应用于handleMessage()方法,无论处理器类型如何。
重要的是要明白HandleMessageAdvice实现(如幂等接收器)在应用于返回响应的处理程序时,与建议链并且正确应用于MessageHandler.handleMessage()方法。
| 由于这种分离,咨询链订单不会被执行。 |
考虑以下构型:
<some-reply-producing-endpoint ... >
<int:request-handler-advice-chain>
<tx:advice ... />
<ref bean="myHandleMessageAdvice" />
</int:request-handler-advice-chain>
</some-reply-producing-endpoint>
在前面的例子中,<tx:建议>应用于摘要回复ProducingMessageHandler.handleRequestMessage().
然而我的HandleMessage建议应用于MessageHandler.handleMessage().
因此,它在<tx:建议>.
要保持顺序,你应遵循标准的 Spring AOP 配置方法,使用端点身份证与。处理器后缀以获得目标消息处理器豆。
注意,在这种情况下,整个下游流程都在交易范围内。
在消息处理器该请求不会返回回复,建议链顺序会被保留。
从5.3版本开始,HandleMessageAdviceAdapter提供用于应用任意拦截方法对于MessageHandler.handleMessage()方法,因此也包括整个子流。
例如,一个重试拦截行动可以应用于从某个端点开始的整个子流;默认情况下这是不可能的,因为消费者端点只对摘要回复ProducingMessageHandler.RequestHandler.handleRequestMessage().