【问题标题】:Handling Camel sftp endpoint authentication failure处理 Camel sftp 端点认证失败
【发布时间】:2017-12-22 11:07:20
【问题描述】:

是否有任何理智的方法来处理 sftp 端点的身份验证失败?

我有一个带 sftp 端点的骆驼路线,特别是它把文件移动到 sftp。当 sftp 位置不可用时,我想:

  • 如果身份验证失败,请记录并不要重试。将原始文件移至失败文件夹。
  • 如果主机未知,请登录并不要重试。将原始文件移至失败文件夹。
  • 否则:在失败前重试几次。

不幸的是,SftpOperations 总是不断重试。在身份验证失败的情况下(如果部署应用程序的人在属性文件中输入错误,这很容易发生),这意味着使用错误的凭据重复尝试。如果只是密码错误,可能会导致用户被屏蔽。

【问题讨论】:

标签: apache-camel jsch camel-ftp


【解决方案1】:

在我的具体情况下,我决定在 sftp 端点出现错误的情况下根本不重试。这是通过在路由配置中添加以下内容来实现的:

   &maximumReconnectAttempts=0&throwExceptionOnConnectFailed=true&consumer.bridgeErrorHandler=true

第一次尝试后路由现在失败。 在更一般的情况下,如果您想处理不同的异常(请参阅this 问题),您可以像这样使用 onException:

        from(route.getDownloadFromUri())
            .routeId(route.getRouteId())
            .routePolicy(getRoutePolicy())
            .onException(JSchException.class)
                .maximumRedeliveries(2)
                .handled(true)
                .log(LoggingLevel.ERROR, LOG, "!!!! Caught JSchException")
                .to(SEND_EMAIL_ROUTE)
                .end()
            .onException(Throwable.class)
                .maximumRedeliveries(5)
                .handled(true)
                .log(LoggingLevel.ERROR, LOG, "Error moving file ${file:name}: ${exception}")
                .to(SEND_EMAIL_ROUTE)
                .end()
            .onException(IgnoreException.class) // Do nothing, just end processing so routePolicy onEchangeDone is executed
                .handled(true)
                .end()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多