具有回退策略的轮询器,用于暂时不可用的可轮询消息源

时间:2018-12-13 13:19:47

标签: spring-integration

我正在尝试使用DynamicPeriodicTrigger实现一个轮询器,如果可轮询消息源(例如FTP服务器)变得不可用,它将回退(增加轮询之间的持续时间),有点像已经通过SimpleActiveIdleMessageSourceAdvice完成的操作,但是该建议需要以便能够捕获在轮询期间引发的异常。不幸的是AbstractMessageSourceAdvice的invoke方法是最终的,因此我不能覆盖它。

我还尝试了另一种方法,即通过使轮询器将轮询转发到错误通道来捕获轮询异常,在此我可以增加触发器的持续时间(该部分可以正常工作)。在这种情况下,问题在于下次轮询成功时如何重置触发器(即消息源再次可用)。我不能仅仅在下游处理程序方法中重置触发器,因为消息源可能已经恢复,但是仍然可能没有消息可用(在这种情况下,永远不会调用我的下游处理程序方法来重置触发器的持续时间)。

非常感谢您的专业知识和时间。 最好的问候

1 个答案:

答案 0 :(得分:1)

您不必覆盖AbstractMessageSourceAdvice;如您所见,它的invoke方法非常简单;只需复制它并根据需要添加功能(只需确保实施MessageSourceMutator,以便将其检测为仅接收建议)。

也许就像将invocation.proceed()移至受保护的非最终方法一样简单。

如果您提出了一些您认为通常对社区有用的内容,请考虑将其回馈给框架。