2013-08-13 6 views
0

파일을 찾을 수 없을 때 camel-ftp 구성 요소가 죽는 것처럼 보일 수 없습니다. URI가 그것을 사용하는Camel-FTP는 한 번만 실행됩니까?

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

및 구성 :

ftp://[email protected]/?password=pass&stepwise=false&binary=true&delete=false&noop=true&pollStrategy=#noPoll

는 여전히 응답이 파일을 찾고

나는 1의 한계와 LimitedPollingConsumerPollStrategy 추가 , 찾을 수 없을 때 .. 그래서 URI에 &sendEmptyMessageWhenIdle=true 추가했습니다.

NULL 본문을 통해 메시지가 통보 될 때 내 경로에 로그를 출력하는 조건이 추가되어 폴링 소비자의 한계가 작동하지 않는 것으로 보입니다. 나는 그것을 &consumer.pollStrategy=#noPoll으로 바꾸려고 시도했고 같은 행동을 보였다.

답변

1

LimitedPollingConsumerPollStrategy은 소비자가 일 때 X의 횟수만큼 실패한 경우를 나타냅니다.. 이것은 또한 그것의 문서에 설명되어 있습니다. 1 회 투표 후 중지하지 않았습니다.

매개 변수 polledMessages = 0을 사용하여 커밋 메소드를 호출 할 때 중지되는 자체 폴링 전략을 구현할 수 있습니다. 그러면 폴링 된 파일이 없음을 알 수 있습니다.

+0

당신은 FTP와 함께 설문 조사 stratgey의 예를 제공 할 수 있습니까? – pmartin8

1

다음 메시지가 사용되지 않으면 다음 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