5

特定のディレクトリから特定の時間間隔で一度に10個のファイルをポーリングしたい。そのディレクトリに250個のファイルが存在する場合、インバウンドのMuleファイルは250個のうち10個のファイルを取り出して処理し、さらに10個のファイルなどを処理する必要があります。ポーリング頻度の値は「10000」です。

このようにmaxThreadsActiveを適用しようとしましたが、機能しません

<file:connector>
<receiver-thread-profile maxThreadsActive=10/>
</file:connector>
4

1 に答える 1

12

Mule では、トランスポート実装の特定の部分をオーバーライドできます。この場合org.mule.transport.file.FileMessageReceiver、特にlistFiles()メソッドをオーバーライドする必要があります。

public class MyFileMessageReceiver extends FileMessageReceiver
{
    private static final MAX_FILES = 10;

    @Override
    List<File> listFiles() throws MuleException
    {
        try
        {
            List<File> files = new ArrayList<File>();
            this.basicListFiles(readDirectory, files);

            if(files.isEmpty())
                return NO_FILES;

            if(files.size() > MAX_FILES)
                return files.subList(0, MAX_FILES);
            else
                return files;
        }
        catch (Exception e)
        {
            throw new DefaultMuleException(FileMessages.errorWhileListingFiles(), e);
        }
    }
}

次に、メッセージ レシーバーを使用するコネクタを作成します。

<file:connector name="inboundFileConnector"> 
    <service-overrides messageReceiver="org.mule.transport.file.MyFileMessageReceiver"/> 
</file:connector>

最後に、構成内の任意のファイル インバウンド エンドポイントでこのコネクタを使用できます。ポーリング頻度を指定するだけで完了です。

HTH

于 2013-03-26T14:44:21.987 に答える