如何覆盖mule SFTP端点的默认行为?

时间:2017-12-13 06:45:58

标签: mule sftp mule-component

我需要覆盖mule SFTP入站端点的默认行为。我有骡子流从SFTP位置选择文件&做一些交替&发送给第三方服务。我没有文件上传控制器。因此可能同时存在多个文件。

我需要在那里实施限制机制。例如:骡子流需要在一次民意调查中挑选最早的10个文件。因此,我计划覆盖mule SFTP客户端的默认行为来实现此目的。我正在使用JAVA。

1 个答案:

答案 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;
 }