0

当没有找到文件时,我似乎无法让 camel-ftp 组件死掉。

我添加了LimitedPollingConsumerPollStrategy一个限制为1

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

并配置 URI 以使用它:

ftp://user@host.ftp/?password=pass&stepwise=false&binary=true&delete=false&noop=true&pollStrategy=#noPoll

当它没有找到任何文件时,它仍然只是挂起,寻找文件。所以我添加&sendEmptyMessageWhenIdle=true到 URI。

我在我的路由中添加了条件以输出以在消息通过空正文时进行记录,并且我看到大量这些消息,因此轮询消费者的限制似乎不起作用。我尝试将其更改为&consumer.pollStrategy=#noPoll并且它的行为相同。

4

2 回答 2

2

如果没有消息被消费,以下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);
        }
    }
}

在骆驼注册表中注册并使用如下:ftp://127.0.0.1/mydir?pollStrategy=#pollOnce

于 2015-12-16T12:18:10.930 回答
1

LimitedPollingConsumerPollStrategy用于限制消费者连续失败X 次的时间。这也是它的文档中解释的内容。它不是为了在 1 次民意调查后停止。

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

于 2013-08-14T13:00:46.560 回答