我正在尝试使用DynamicPeriodicTrigger实现一个轮询器,如果可轮询消息源(例如FTP服务器)变得不可用,它将回退(增加轮询之间的持续时间),有点像已经通过SimpleActiveIdleMessageSourceAdvice完成的操作,但是该建议需要以便能够捕获在轮询期间引发的异常。不幸的是AbstractMessageSourceAdvice的invoke方法是最终的,因此我不能覆盖它。
我还尝试了另一种方法,即通过使轮询器将轮询转发到错误通道来捕获轮询异常,在此我可以增加触发器的持续时间(该部分可以正常工作)。在这种情况下,问题在于下次轮询成功时如何重置触发器(即消息源再次可用)。我不能仅仅在下游处理程序方法中重置触发器,因为消息源可能已经恢复,但是仍然可能没有消息可用(在这种情况下,永远不会调用我的下游处理程序方法来重置触发器的持续时间)。
非常感谢您的专业知识和时间。 最好的问候
答案 0 :(得分:1)
您不必覆盖AbstractMessageSourceAdvice
;如您所见,它的invoke
方法非常简单;只需复制它并根据需要添加功能(只需确保实施MessageSourceMutator
,以便将其检测为仅接收建议)。
也许就像将invocation.proceed()
移至受保护的非最终方法一样简单。
如果您提出了一些您认为通常对社区有用的内容,请考虑将其回馈给框架。