处理消息通知
如本节简介中所述,请求处理程序 advice 链中的 advice 对象仅应用于当前端点,而不是下游流(如果有)。
对于生成 reply 的对象(例如那些 extends ),建议应用于内部方法: (called from )。
对于其他消息处理程序,建议将应用于 .MessageHandler
AbstractReplyProducingMessageHandler
handleRequestMessage()
MessageHandler.handleMessage()
MessageHandler.handleMessage()
在某些情况下,即使消息处理程序是 ,也必须将建议应用于该方法。
例如,幂等接收器可能会返回 ,如果处理程序的属性设置为 ,则会导致异常。
另一个示例是 — 请参阅 严格消息排序。AbstractReplyProducingMessageHandler
handleMessage
null
replyRequired
true
BoundRabbitChannelAdvice
从版本 4.3.1 开始,引入了新的接口及其基本实现 () 。 实现的对象始终应用于方法,而不管处理程序类型如何。HandleMessageAdvice
AbstractHandleMessageAdvice
Advice
HandleMessageAdvice
handleMessage()
请务必了解,当应用于返回响应的处理程序时,实现(例如幂等接收器)将与 分离并正确应用于方法。HandleMessageAdvice
adviceChain
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>
在前面的示例中,the 应用于 .
但是,已申请 到 。
因此,它在 .
要保持顺序,您应该遵循标准的 Spring AOP 配置方法,并使用端点和后缀来获取目标 bean。
请注意,在这种情况下,整个下游流都在事务范围内。<tx:advice>
AbstractReplyProducingMessageHandler.handleRequestMessage()
myHandleMessageAdvice
MessageHandler.handleMessage()
<tx:advice>
id
.handler
MessageHandler
如果 a 不返回响应,则保留建议链顺序。MessageHandler
从版本 5.3 开始,提供了 for for the method,从而应用于整个 sub-flow。
例如,a 可以应用于从某个端点开始的整个子流;默认情况下,这是不可能的,因为使用方终端节点仅将建议应用于 .HandleMessageAdviceAdapter
MethodInterceptor
MessageHandler.handleMessage()
RetryOperationsInterceptor
AbstractReplyProducingMessageHandler.RequestHandler.handleRequestMessage()