2017-12-13 32 views
1

뮬 SFTP 인바운드 엔드 포인트의 기본 동작을 무시해야합니다. SFTP 위치에서 파일을 선택하기 위해 노새 흐름이 있습니다 & 대체 방법 & 타사 서비스로 보내십시오. 파일 업로드에 컨트롤러가 없습니다. 그래서 같은 시간에 여러 개의 파일이있을 수 있습니다.mule SFTP 끝점의 기본 동작을 무시하는 방법?

거기에 조절 메커니즘을 구현해야합니다. 예를 들어 : 뮬 플로우는 하나의 설문 조사에서 가장 오래된 10 개의 파일을 선택해야합니다. 그래서 이것을 달성하기 위해 노새 SFTP 클라이언트의 기본 동작을 무시할 계획입니다. 자바를 사용하고 있습니다. 자신의 SftpMessageReceiver를 구현 등이 사용자 정의 구성 요소를 사용하여 SFTP 커넥터를 구성 :

+0

당신이 SFTP를 사용하려면 또는 마십시오 :이 동작을 복제 않거나 중복을 통해 인스턴스 객체를 검색하기 위해이 메소드를 오버라이드 (override) 방지와 같은, 당신의 자신의 분야에 영향을 미치는 자신의 생성자에서이 함수를 호출 할 수 있습니다 FTP 커넥터? 이것들은 다른 것들입니다. (정확한 답변을 편집하십시오) –

+0

죄송합니다. 실수로 FTP를 추가했습니다. SFTP 커넥터가 필요합니다. 내 질문을 업데이트했습니다. –

답변

3

당신은 Transport Service Override을 활용할 수

<sftp:connector name="sftp-connector" ... /> 
    ... 
    <service-overrides messageReceiver="com.mycomp.MySftpMessageReceiver" /> 
</sftp:connector> 

나는 당신이 뮬 버전에 대한 기존 수신기의 poll() 함수를 재정의 추천 할 것입니다 당신 사용하고 있습니다. Mule 3.9의 경우 모든 파일을 검색하고 발견 된 각 파일에 대해 routeFile()을 호출합니다. 자신 만의 poll()을 구현할 수 있으며 대신 가장 최근의 10 개의 파일을 선택하여 동일한 동작을 재현합니다. 여기서 완전한 코드 샘플을 제공하지는 않겠지 만, 기존 함수 (검색, 잠금, 라우트)의 영감을 받아 직접 구현할 수 있습니다. 예를 들어 기존 SftpMessageReceiver를 오버라이드 (override)

public class MySftpMessageReceiver extends SftpMessageReceiver { 
    ... 
    @Override 
    public void poll() throws Exception { 
     //poll 10 oldest files 
     //... 
     //route them 
     for (String file : files){ 
      //... 
      routeFile(file); 
     } 
    } 
    ... 
} 

참고 단순히 다른 사람의 사이에서 갈 수있는 방법입니다. 아이디어는 자신의 MessageReceiver을 구현하고 위에서 설명한대로 서비스 재정의를 사용하는 것입니다.

EDIT : @NNishanthi와 마찬가지로 개인 SftpReceiverRequesterUtil을 검색하라는 요청 : 직접 생성자를 만들거나 수퍼 생성자가 생성 한 인스턴스를 검색 할 수 있습니다.

코드를 보면 코드가 보호 된 createSftpReceiverRequesterUtil() 함수로 생성되었으며 생성자가 개인 필드에 영향을 미친 것을 볼 수 있습니다.

private SftpReceiverRequesterUtil sftpRRUtil = null; 
... 
@Override 
protected SftpReceiverRequesterUtil createSftpReceiverRequesterUtil(InboundEndpoint endpoint) { 
    sftpRRUtil = super.createSftpReceiverRequesterUtil(endpoint); 
    return sftpRRUtil; 
} 
+0

피에르 감사합니다. 나는 뮬 3.8을 사용하고 있습니다. 나는 내 자신의 클래스에서 SftpMessageReceiver의 폴링 메소드를 오버라이드하려고 시도했다. poll() 메소드와 함께 SftpReceiverRequesterUtil 클래스를 사용하여 파일을 검색하고 LockFactory 인터페이스를 사용하여 파일을 잠급니다. 그러나 그것들은 사적인 변수이며 하위 클래스에서는 볼 수 없습니다. 어떻게 이것을 관리합니까? –

+0

직접 생성하거나 상위 생성자가 만든 것을 재사용 할 수 있습니다. 사용 된 함수가 보호되고 오버라이드 될 수있는 것을 볼 수있는 소스 코드를 보면 인스턴스를 검색하여 자신의 필드에 적용 할 수 있습니다. 나는 예제로 편집 할 것이다. –

+0

Pierre-B에게 감사드립니다. 이것은 효과가있다. –