2017-12-13 15 views
1

ミュールSFTPインバウンドエンドポイントのデフォルト動作を変更する必要があります。私はSFTPの場所からファイルを選ぶためにノアフローを持っています&いくつかの変更を行う&サードパーティのサービスに送信します。私はファイルアップロードのコントローラを持っていません。したがって、同じ時間に多数のファイルが存在する可能性があります。mule SFTPエンドポイントのデフォルトの動作を上書きする方法は?

私はそこにスロットルメカニズムを実装する必要があります。例:Muleのフローは、1つのポーリングで最も古い10個のファイルを選択する必要があります。ですから、これを達成するためにSFTPクライアントのデフォルト動作をオーバーライドする予定です。私はJAVAを使用しています。

+0

:あなたのような、この動作を複製するか、またはインスタンス化オブジェクトを取得するには、このメソッドをオーバーライドして、独自のフィールドに影響を与え、重複を避けるために、独自のコンストラクタでこの関数を呼び出すことができますFTPコネクタ?これらは別のものです(正確な答えを編集してください) –

+0

申し訳ありませんが、誤ってFTPを追加しました。私はSFTPコネクタが必要です。私は私の質問を更新しました。 –

答えて

3

あなたはTransport Service Overrideを活用することができます:私はあなたがMuleのバージョンの既存の受信機のpoll()機能を無効に推薦する

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

:自分SftpMessageReceiverを実装し、そのように、このカスタムコンポーネントを使用するようにSFTPコネクタを設定使っている。 Mule 3.9では、すべてのファイルを取得し、見つかったファイルごとにrouteFile()を呼び出します。独自のpoll()を実装して、代わりに最新の10個のファイルを選択し、同じ動作を再現することができます。完全なコードサンプルはここでは提供しませんが、既存の関数(取得、ロック、ルート)のインスピレーションを得て、独自の実装を実装することができます。例:既存のSftpMessageReceiverを上書き

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

ノートは、単に他の人の間で移動するための方法です。考え方はあなた自身のMessageReceiverを実装し、上記のようにサービスオーバーライドを使用することです。

編集:@NNishanthiによると、プライベートなものを取得するリクエストSftpReceiverRequesterUtil:独自のインスタンスを作成したり、スーパーコンストラクタによって作成されたインスタンスを取得することができます。

コードを見ると、保護されたcreateSftpReceiverRequesterUtil()関数で作成され、コンストラクタによるプライベートフィールドの影響を受けることがわかります。あなたがSFTPを使用したいかでください

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

お返事ありがとうございます。私はmule 3.8を使用しています。私は自分のクラスのSftpMessageReceiverでpollメソッドをオーバーライドしようとしました。 poll()メソッドでは、SftpReceiverRequesterUtilクラスを使用してファイルを取得し、LockFactoryインターフェイスを使用してファイルをロックします。しかし、それらはプライベート変数であり、サブクラスでは見えません。どのようにこれを管理するのですか? –

+0

スーパーコンストラクタで作成したものを再利用することもできます。使用している関数が保護されており、上書きできることがわかるソースコードを見ると、インスタンスを取得して自分のフィールドに影響を与えることができます。私は例を使って編集します。 –

+0

ご協力いただきありがとうございます。これは働いた –

関連する問題