我需要覆盖mule SFTP入站端点的默认行为。我有骡子流从SFTP位置选择文件&做一些交替&发送给第三方服务。我没有文件上传控制器。因此可能同时存在多个文件。
我需要在那里实施限制机制。例如:骡子流需要在一次民意调查中挑选最早的10个文件。因此,我计划覆盖mule SFTP客户端的默认行为来实现此目的。我正在使用JAVA。
答案 0 :(得分:3)
您可以利用Transport Service Override:实施您自己的SftpMessageReceiver
并配置您的SFTP连接器以使用此自定义组件,例如:
<sftp:connector name="sftp-connector" ... />
...
<service-overrides messageReceiver="com.mycomp.MySftpMessageReceiver" />
</sftp:connector>
我建议你覆盖你正在使用的Mule版本的现有接收器的poll()
功能。对于Mule 3.9,它将检索所有文件并为每个找到的文件调用routeFile()
。您可以实现自己的poll()
,而不是选择最近的10个文件并重现相同的行为。我不会在这里提供完整的代码示例,但您可以从现有功能(检索,锁定,路由)中获取灵感来实现您自己的功能。例如:
public class MySftpMessageReceiver extends SftpMessageReceiver {
...
@Override
public void poll() throws Exception {
//poll 10 oldest files
//...
//route them
for (String file : files){
//...
routeFile(file);
}
}
...
}
注意覆盖现有的SftpMessageReceiver
只是一种方法。我们的想法是实现您自己的MessageReceiver
并使用上述服务覆盖。
编辑:根据@NNishanthi Wickramasinghe请求检索私有SftpReceiverRequesterUtil
:您可以创建自己的实例或检索由超级构造函数创建的实例。
查看代码,您可以看到它是使用受保护的createSftpReceiverRequesterUtil()
函数创建的,并且受构造函数影响到私有字段。您可以在自己的构造函数中调用此函数来复制此行为,或者为了避免重复覆盖此方法来检索instanciated对象并将其影响到您自己的字段,例如:
private SftpReceiverRequesterUtil sftpRRUtil = null;
...
@Override
protected SftpReceiverRequesterUtil createSftpReceiverRequesterUtil(InboundEndpoint endpoint) {
sftpRRUtil = super.createSftpReceiverRequesterUtil(endpoint);
return sftpRRUtil;
}