buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

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里。

posted on 2021-02-10 11:20  buguge  阅读(624)  评论(0编辑  收藏  举报