代码之家  ›  专栏  ›  技术社区  ›  Dron4K

Java健康检查最佳实践

  •  1
  • Dron4K  · 技术社区  · 6 年前

    我正在使用Spring集成将文件加载到sftp。我有类似的会议:

    <bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
            <property name="host" value="${host}"/>
            <property name="port" value="${port}"/>
            <property name="user" value="${username}"/>
            <property name="password" value="${password}"/>
            <property name="knownHosts" value="${known.hosts}"/>
    </bean>
    

    我需要每隔几个小时检查一次SFTP是否健康。这是在运行状况检查器中使用默认sftpsessionFactory的正确方法吗?

    public class HealthChecker
    {
        @Autowired
        private DefaultSftpSessionFactory sftpSessionFactory;
    
        public String doHealthCheck()
        {
            try
            {
                SftpSession sftpSession = sftpSessionFactory.getSession();
                if (sftpSession.isOpen())
                {
                    sftpSession.close();
                    return "OK";
                }
            }
            catch (Exception ex)
            {
                LOG.error("Can't connect to sftp", ex);
            }
            return "ERROR";
        }
    }
    

    在使用HealthCheck时,是否有一些最佳实践需要我们使用?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Anuar Nurmakanov    6 年前

    我认为你的解决方案背后的想法是好的,只要记住健康检查服务不应该太重。为了以防万一,如果您使用任何监视工具,即每隔n秒/分钟进行一次轮询,那么如果您的健康检查服务长时间运行,它可能会不时失败。

    我还建议使用弹簧执行器,类似于:

     @Endpoint(id = "sftp")
     @Component
     @RequiredArgsConstructor
     public class SftpEndpoint {
         @ReadOperation
         public Map<String, Object> sftp() {
         }
     }