【问题标题】:How to override default behavior of mule SFTP endpoint?如何覆盖 mule SFTP 端点的默认行为?
【发布时间】:2018-11-26 16:18:24
【问题描述】:

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

我需要在那里实施节流机制。例如:Mule 流程需要在一次投票中选择最旧的 10 个文件。所以我打算覆盖 mule SFTP 客户端的默认行为来实现这一点。我正在使用 JAVA。

【问题讨论】:

  • 您想使用 SFTP 还是 FTP 连接器?这些是不同的东西(请编辑您的答案以准确)
  • 抱歉错误地添加了 FTP。我需要 SFTP 连接器。我更新了我的问题。

标签: mule sftp mule-component


【解决方案1】:

您可以利用 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() 函数创建的,并受构造函数影响到私有字段。你可以在你自己的构造函数中调用这个函数做重复这个行为,或者为了避免重复重写这个方法来检索实例化的对象并将它影响到你自己的字段,例如:

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

【讨论】:

  • 感谢皮埃尔的回复。我正在使用骡子3.8。我试图在我自己的类中覆盖 SftpMessageReceiver 中的 poll 方法。在 poll() 方法中,它使用 SftpReceiverRequesterUtil 类来检索文件和 LockFactory 接口来锁定文件。但这些是私有变量,在子类中不可见。我该如何处理?
  • 您可以创建自己的,甚至更好,重用由超级构造函数创建的那个。查看源代码,您可以看到使用的函数受到保护并且可以被覆盖,然后您可以使用它来检索实例并将其影响到您自己的字段。我会用一个例子来编辑。
猜你喜欢
  • 2019-07-07
  • 1970-01-01
  • 2013-03-10
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多