2016-04-22 32 views
1

我正在使用入站轮询器处理来自撤销队列的失败请求。对于调度,我使用了'0 0/2 * * * *'的玉米表达式,即每两分钟执行一次轮询器。调度按照玉米工作正常,但PollSkipStrategy.skipPoll方法正在调用每个被调查的消息。我的印象是,轮询跳过策略将针对每次轮询执行一次,而不是针对每个轮询的记录。我已经实现了PollSkipStrategy.skipPoll,它基于peperty返回true或false。我在这里错过了什么?下面是我的配置 为什么PollSkipStrategy.skipPoll方法在队列中轮询的每条消息都被调用?

<bean id="RegistrationEventPoller" 
     class="com.poller.RegistrationEventPoller"> 
     <property name="RegistrationEventRetryCount" value="$env{RegistrationEventRetryCount}"/> 
    </bean> 

    <bean id="PollSkipAdvice" class="org.springframework.integration.scheduling.PollSkipAdvice"> 
     <constructor-arg ref="PollSkipStrategy"/> 
    </bean> 

    <bean id="PollSkipStrategy" 
     class="com..poller.PollSkipStrategy"> 
     <property name="RegistrationPollerOnOff" value="$env{RegistrationPollerOnOff}"/> 
    </bean> 

回答

1

的建议是对整个流程(MessageSource.receive()和发送消息)的环绕advice。当轮询者触发时,它会调用最多maxMessagesPerPoll的流量,因此,对于在轮询中找到的每条消息,实际上都会调用该建议,而不是仅在第一次轮询时调用该建议。它只是提供一种机制,在某些情况阻止您处理消息时停止调用消息源。

在4.2中增加了更复杂的Smart Polling功能,这为您提供了更多的灵活性。

+0

谢谢你,我正在使用4.6.1,升级不在计划中。但是,为了减少资源使用,我会看看是否有其他选项可用,例如使用功能切换从数据库和缓存读取池跳过建议。 – Vinay

相关问题