Spring集成DelayHandler,retryDelay和messageStore

问题描述

Delayer具有消息存储,它提供了在应用程序关闭不会丢失消息的功能。延迟一分钟,它的工作正常。 但是,如果我设置了retryDelay,则该消息将在第一次尝试时从消息存储中删除,并且在应用程序关闭时会丢失。

为什么会发生?为什么邮件没有存储在邮件存储中以便重试?

解决方法

我认为这是一个遗漏,我们确实必须在每次重试时都将消息存储回去。 请提出GH问题作为错误,我们将尽快修复。

作为一种解决方法,我建议看一下Collection.CancelCollection(),并使用其ExpressionEvaluatingRequestHandlerAdvicefailureChannel将消息重新路由回您的onFailureExpression。由于内部重试对我们没有帮助,您可能需要合并delayer而不是RequestHandlerRetryAdvice

有关这些建议,请参阅文档:https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/messaging-endpoints.html#message-handler-advice-chain

还有延迟器的retryDelay选项。