如何正确地将RetryAdvice添加到Jms.messageDriverChannelAdapter

时间:2019-05-23 18:57:23

标签: spring spring-integration spring-integration-dsl

我是Spring Integration DSL的新手,我需要在现有IntegrationFlow上增加重试和恢复功能。它从Jms.messageDriverChannelAdapter接收数据,并通过不同的通道发送数据。我想为整个流程添加RequestHandlerRetryAdvice。

我的想法是将其添加到适配器中,但是它似乎仅支持ErrorChannel,而没有建议和重试等。我最终将Jms.messageDriverChannelAdapter之后的整个流程包装在带有建议和.requireReply(false)的.gateway中。感觉就像是骇客,但我找不到更好的方法。有什么更好的方法来应对这种情况?

1 个答案:

答案 0 :(得分:1)

与Spring AMQP的侦听器容器不同,JMS并没有提供向其注入Advice链的钩子,因此,我们确实没有选择和解决方法。 RequestHandlerRetryAdvice.gateway() DSL并不是一个坏主意。关键是RequestHandlerRetryAdvice仅适用于特定的handleRequestMessage()方法,而不会传播到下游。将流程包装到来自提到的handleRequestMessage()的网关调用中是可行的方法。

我认为我们可以在JmsMessageDrivenEndpoint上提出解决方案,以使用注入的Advice链来包装内部侦听器,其中一个可能是RetryOperationsInterceptor

请提出一个GH问题,我们将思考我们能做什么。