• item "tracker_server" in file:/***/WEB-INF/lib/***.jar!/fdfs_client.conf not found


    【异常的诞生】

    周五下午接到反馈,说客户向我们系统发起API签约失败。立即查优付trans-business日志,在对签约log进行链路追踪时,发现如下异常。在往文件服务器保存用户证照图片时,fastdfs出现异常。

    2021-02-08 16:05:24.483 [ERROR] [clientBusiness_common_do_16127804955370E234] [com.yft.util.FastDFSUtils:86] 读取fdfs配置文件失败!
    org.csource.common.MyException: item "tracker_server" in file:/www/epaysch/tomcat-trans-8280/webapps/pctrans-business/WEB-INF/lib/pctrans-core-0.0.1-SNAPSHOT.jar!/fdfs_client.conf not found
    	at org.csource.fastdfs.ClientGlobal.init(ClientGlobal.java:102)
    	at com.yft.util.FastDFSUtils.upload(FastDFSUtils.java:84)
    	at com.cn.yft.pay.service.impl.SignContractServiceImpl.doBusiness(SignContractServiceImpl.java:163)
    	at com.cn.yft.merchant.controller.ClientBusinessController.doBusiness(ClientBusinessController.java:227)

    【快速响应:】

    1. 前一天的周四是例行上线日,由此可以确认这个问题是上线导致的。通过异常信息: item "tracker_server" in file:/www/epaysch/tomcat-trans-8280/webapps/pctrans-business/WEB-INF/lib/pctrans-core-0.0.1-SNAPSHOT.jar!/fdfs_client.conf not found, 文件不存在?在确认master分支代码的配置文件正常后,赶紧找世伟确认pctrans-core这个jar里是不是缺少了这个文件。经查,并未少。
    2. 初步分析是因为fdfs_client.conf不是properties文件导致的,就像我们读.cer证书一样,从.jar里是读不到的。就是说,这种文件应该在/www/epaysch/tomcat-trans-8280/webapps/pctrans-business/WEB-INF/classes/下面。
    3. 不过,最重要的是先解决问题。经过与在洲、明辉初步沟通,可以对昨天夜间发版的trans进行回滚。于是,找世伟,先回滚代码,保证系统可以正常使用。(2021年2月9日确认一共影响15笔带照片的签约)

    【前一晚的发版内容】

    我们的优付项目工程里有这么3个module,其中,trans-business和trans-provider是主应用,二者都依赖trans-core。因为要区分dev/test/prod环境,二者都包含了许多环境配置properties文件,比如jdbc.properties、fastDFS.properties、fdfs_client.conf、redis.properties,还有其他的与系统相关的properties文件,如bank_config.properties、levy.properties、business_config.properties等等。
    由于涉及到配置改动时,可能要同时改两个项目,而不知情的开发成员会出现漏改。所以这次需求迭代开发过程中,我们决定将共同的配置文件统一封装到trans-core里。

    这次发版比较顺利,不过还是出现了这个败笔。人有千虑,难免有一失呀!

    【fastdfs出现异常的代码】

    如下 FastDFSUtils#upload,本案异常在加粗行抛出和捕获。

    /**
     * 上传图片返回9
     *
     * @param pic  图片二进制
     * @param name 名字
     * @param size 大小
     * @return 图片的路径(不包括ip和端口)
     * @throws Exception
     */
    //上传图片 返回图片路径
    public static String upload(byte[] pic, String name, Long size) throws Exception {
        //全局设置IP 端口  参数 fdfs_client.conf
        ClassPathResource resource = new ClassPathResource("fdfs_client.conf");
        //设置成功
        try {
            ClientGlobal.init(resource.getClassLoader().getResource("fdfs_client.conf").getPath());
        } catch (Exception e) {
            logger.error("读取fdfs配置文件失败!", e);
        }
        //ip 15683
        TrackerClient trackerClient = new TrackerClient();
        //创建连接
        TrackerServer trackerServer = null;
        try {
            trackerServer = trackerClient.getConnection();
        } catch (IOException e) {
            logger.error("创建tracker连接时失败!", e);
        }
        。。。
    }

     【解决方案】

    接下来是按初步思路来修改程序,在测试环境测试,证实原先的分析是ok的。解决方案就是把 fdfs_client.conf 原路移植回trans-business和trans-provider里。

  • 相关阅读:
    可复用的WPF或者Silverlight应用程序和组件设计(1)——应用程序级别
    优化网站设计(一):减少请求数
    可复用的WPF或者Silverlight应用程序和组件设计(5)——布局重用
    演讲时经常用到的几个小工具介绍
    谈一谈职业素养
    优化网站设计(三):对资源添加缓存控制
    可复用的WPF或者Silverlight应用程序和组件设计(4)——外观级别
    如何在ViewModel中正确地使用Timer(定时器)
    一把锋利的匕首:利用数据绑定语法糖为Flash应用提供富JS接口
    一句话总结.Net下struct和class内存分配方面的区别
  • 原文地址:https://www.cnblogs.com/buguge/p/14395270.html
Copyright © 2020-2023  润新知