【发布时间】:2014-06-18 20:41:30
【问题描述】:
我想控制文件入站和消息处理器中的线程数。假设如果我的输入目录中有 5 个文件,那么我应该能够一次处理 2 个文件。一旦处理了这些文件(文件内容由消息处理器处理),那么只有它应该拾取其他文件。我曾尝试在流级别使用同步处理策略,但它只处理一个文件,我想要多个线程,但每个线程将直接从接收文件处理消息以发送响应。我尝试了大卫建议的方法,但它也不起作用。一次只拾取一个文件。
<flow name="fileInboundTestFlow2" doc:name="fileInboundTestFlow2" processingStrategy="synchronous">
<poll frequency="1000">
<component class="FilePollerComponent" doc:name="File Poller"></component>
</poll>
<collection-splitter />
<request-reply >
<vm:outbound-endpoint path="out"/>
<vm:inbound-endpoint path="response">
<collection-aggregator/>
</vm:inbound-endpoint>
</request-reply>
<file:outbound-endpoint path="E:/fileTest/processed" />
</flow>
public class FilePollerComponent implements Callable{
private String pollDir="E://fileTest" ;
private int numberOfFiles = 3;
public String getPollDir()
{
return pollDir;
}
public void setPollDir(String pollDir)
{
this.pollDir = pollDir;
}
public int getNumberOfFiles()
{
return numberOfFiles;
}
public void setNumberOfFiles(int numberOfFiles)
{
this.numberOfFiles = numberOfFiles;
}
@Override
public Object onCall(MuleEventContext eventContext) throws Exception
{
File f = new File(pollDir);
List<File> filesToReturn = new ArrayList<File>(numberOfFiles);
if(f.isDirectory())
{
File[] files = f.listFiles();
int i = 0;
for(File file : files)
{
if(file.isFile())
filesToReturn.add(file);
if(i==numberOfFiles)
break ;
i++;
}
}
else
{
throw new Exception("Invalid Directory");
}
return filesToReturn;
}}
【问题讨论】:
标签: mule