为什么要对从队列中轮询的每条消息调用PollSkipStrategy.skipPoll方法?

时间:2016-04-22 13:30:46

标签: spring spring-integration spring-jms

我正在使用入站轮询器来处理来自回退队列的失败请求。对于调度,我使用玉米表达式'0 0/2 * * * *',即每两分钟执行一次轮询。根据玉米,调度工作正常,但每次轮询的消息都会调用PollSkipStrategy.skipPoll方法。我的印象是,轮询跳过策略将针对每个轮询执行一次而不是针对每个轮询的记录执行。我有PollSkipStrategy.skipPoll的实现,它根据peoperty返回true或false。我在这里错过了一些东西?这是我的配置                                                                                                                                                                             

    <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 个答案:

答案 0 :(得分:1)

建议是关于整个流程的建议(MessageSource.receive()并发送消息)。当轮询器触发时,它会调用最多maxMessagesPerPoll的流程,因此,是的,实际上会为在轮询中找到的每条消息调用建议,而不仅仅是在第一次轮询时。它只是提供了一种机制来停止调用消息源,如果某些条件阻止您处理消息。

4.2中添加了更复杂的Smart Polling功能,为您提供了更大的灵活性。

相关问题