当没有找到文件时,我似乎无法让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,它的表现也是一样的。
发布于 2015-12-16 12:18:10
如果没有使用任何消息,下面的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
发布于 2013-08-14 13:00:46
LimitedPollingConsumerPollStrategy用于限制当用户连续失败次数为X次时。这也是它的文档中所解释的。这并不是为了在1次投票后停止投票。
您可以实现自己的轮询策略,在使用参数polledMessages = 0调用commit方法时停止该策略。那你就知道没有被调查过的文件。
https://stackoverflow.com/questions/18211918
复制相似问题