Camel FTP只运行一次



当找不到文件时,我似乎无法让camel-ftp组件死亡。

我添加了一个限制为1:的LimitedPollingConsumerPollStrategy

<bean id="noPoll" class="org.apache.camel.impl.LimitedPollingConsumerPollStrategy">
    <property name="limit" value="1"/>
</bean>

并将URI配置为使用它:

ftp://user@主机.ftp/?password=pass&逐步=错误&binary=true&delete=false&noop=true&pollStrategy=#noPoll

当它找不到任何文件时,它仍然挂起,寻找文件。。所以我在URI中添加了CCD_ 3。

当一条消息的正文为null时,我在输出到日志的路由中添加了条件,我看到了大量这样的消息,所以对轮询消费者的限制似乎不起作用。我试着把它改成&consumer.pollStrategy=#noPoll,它的行为也一样。

如果未使用任何消息,则以下PollStrategy将停止使用者。

public class PollOncePollStrategy extends DefaultPollingConsumerPollStrategy {
    @Override
    public void commit(Consumer consumer, Endpoint endpoint, int polledMessages) {
        try {
            if (polledMessages == 0) {
                log.info("No polled messages, stopping consumer");
                endpoint.getCamelContext().createProducerTemplate().sendBody(String.format("controlbus:route?async=true&action=stop&routeId=%s", EndpointHelper.getRouteIdFromEndpoint(endpoint)), null);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

在camel注册表中注册它,并按如下方式使用:ftp://127.0.0.1/mydir?pollStrategy=#pollOnce

LimitedPollingConsumerPollStrategy用于在消费者连续失败X次时进行限制。这也是它的文档中所解释的。它不适用于在1次轮询后停止。

您可以实现自己的轮询策略,该策略在使用参数polledMessages=0调用commit方法时停止。然后你就知道没有文件被调查了。

最新更新