【发布时间】:2015-06-01 07:17:58
【问题描述】:
我正在使用 Spring Integration (4.1) 配置从数据库中检索消息,而不是作为服务。我知道我每天要处理十几条消息,因此我需要每天运行一次批处理。
我的 jdbc:inbound-channel-adapter 配置为检索 max-rows-per-poll="1"。当没有更多消息时,我希望以某种方式收到通知,以便我可以退出批处理,但我在寻找“插入”位置时遇到问题。我尝试使用一个拦截器来记住最后一条消息何时通过+一个计划任务,该任务检索该时间戳并检查它是否超过配置的超时,但感觉非常麻烦并尝试使用 AOP,这感觉是一个更好的解决方案。
我想拦截对 AbstractPollingEndpoint.doPoll() 的调用,它在没有消息时返回 false,但我无法找到一种方法:我尝试子类化 AbstractRequestHandlerAdvice 但应用时不起作用在轮询器上(它在日志中告诉我)。现在我正在尝试实现 MethodInterceptor 并配置如下,我看到我可以拦截对“call”方法的调用,但我不确定这是正确的方法
<int:poller default="true" trigger="periodicTriggerWithInitialDelay">
<int:advice-chain>
<bean class="com.myBatch.NoMoreMessageNotifierAdvice" />
<ref bean="txAdvice"/>
</int:advice-chain>
</int:poller>
没有更简单的方法吗?正如http://forum.spring.io/forum/spring-projects/integration/127410-poller-with-advice-chain 所述,主要困难是在这个阶段,我们没有消息可以处理。
谢谢
文森特
【问题讨论】: