【问题标题】:How to invoke Spring Integration SFTP by Azure Functions/Spring Cloud Function如何通过 Azure Functions/Spring Cloud Function 调用 Spring Integration SFTP
【发布时间】:2020-09-22 14:23:07
【问题描述】:

我们目前有 Spring Boot 应用程序,它们使用 Spring Integration SFTP 基于 Cron 计划发送和接收文件。我们正在尝试使用 Spring Cloud Function 将应用程序转换为 Azure Function。只是想知道当应用程序收到来自 Azure Function 的 http 调用时,是否有任何方法可以调用 Spring Integration SFTP 适配器运行一次?从 Spring Integration 的文档来看,轮询器的唯一选择似乎是 Cron 或固定速率/固定延迟。提前感谢您的任何帮助或建议!

【问题讨论】:

    标签: spring-boot azure-functions spring-integration spring-cloud-function


    【解决方案1】:

    我想知道您是否可以添加OnlyOnceTrigger 而不是cron 或fixed。

    它的代码可能是这样的:

    public class OnlyOnceTrigger implements Trigger {
    
        private final AtomicBoolean hasRun = new AtomicBoolean();
    
        @Override
        public Date nextExecutionTime(TriggerContext triggerContext) {
            if (this.hasRun.getAndSet(true)) {
                return null;
            }
            return new Date();
        }
    
    }
    

    另一方面,由于您有一个类似于来自该 HTTP 调用的事件的触发器,您应该考虑使用 SftpOutboundGateway 而不是 getls 命令:https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/sftp.html#sftp-outbound-gateway

    【讨论】:

    • 谢谢阿特姆。我们的目标是尽量减少对现有代码的修改。但是,将按照您的建议尝试这两种方法。真的很感激!
    • 是的......由于只有 HTTP 触发器这样的限制,它不会“尽可能少”:你肯定需要适应这种或其他方式。 MessageSource 的要点是它不依赖于任何事件,并且可以根据其轮询器配置定期执行操作。你所拥有的 HTTP 函数完全不适合轮询模型,否则不适合。这就是为什么我建议使用网关方法来与函数签名保持一致。
    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2018-01-24
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多