收藏
回答

企业微信聊天记录下载多媒体文件导致堆栈异常?

// 单次拉取消息的最大条数 此处为100条。最多1000条,超过1000条则会报错
int limit = weChatConfig.getEnterprise().getBatch_pull_number();
long currEndSeq = currBeginSeq + limit;
log.info("开始拉取{}到{}的聊天记录", currBeginSeq, currEndSeq);
//拉取数据
List<WeChatEnterpriseMsgEncryptResp.WeChatEnterpriseMsgEncryptDTO> chatData = new ArrayList<>();
long slice = Finance.NewSlice();
long pullBeginTime = System.currentTimeMillis();
try {
    int ret = Finance.GetChatData(sdk, currBeginSeq, limit, "", "", 100, slice);
    if (ret != 0) {
        errorPullCount++;
        log.error("拉取聊天记录异常,ret:{}", ret);
        continue;
    }

    String messageJSONStr = Finance.GetContentFromSlice(slice);
    WeChatEnterpriseMsgEncryptResp weChatEnterpriseMsgEncryptResp = JSONObject.parseObject(messageJSONStr,
            WeChatEnterpriseMsgEncryptResp.class);
    if (!WeChatEnterpriseBaseResp.ErrCodeEnum.SUCCESS.getCode().equals(weChatEnterpriseMsgEncryptResp.getErrCode())) {
        log.error(String.format("拉取数据异常,返回结果:%s,睡眠一会", messageJSONStr));
        Thread.sleep(5000);
        errorPullCount++;
        continue;
    }
    weChatEnterpriseMsgEncryptResp.setChatData(weChatEnterpriseMsgEncryptResp.getChatData()
            .stream().filter(weChatEnterpriseMsgEncryptDTO -> weChatEnterpriseMsgEncryptDTO.getSeq() <= endSeq).collect(Collectors.toList()));
    if (CollectionUtils.isEmpty(weChatEnterpriseMsgEncryptResp.getChatData())) {
        // 当currBeginSeq到currEndSeq之间没有获取到聊天消息,变更currBeginSeq继续下一次循环
        log.info("拉取{}到{}的聊天记录为空", currBeginSeq, currEndSeq);
        currBeginSeq = currEndSeq;
        continue;
    }
    // 获取到聊天消息,则放入到chatData中,进行后续的聊天消息写入
    chatData.addAll(weChatEnterpriseMsgEncryptResp.getChatData());
} catch (Exception e) {
    String errorMsg = "拉取聊天记录异常currBeginSeq:" + currBeginSeq;
    log.error(errorMsg, e);
    errorPullCount++;
} finally {
    //关闭
    Finance.FreeSlice(slice);
}







com.**.wechat.manager.service.service.third.impl.WeChatSyncInfoService - 处理消息数:100,耗时0秒

2024/8/3 下午2:36:34 2024-08-03 14:36:34.080 [TRACE_ID:] [tid:TID:Ignored_Trace]  [xxl-job, JobThread-126-1722666944457] INFO  com.**.wechat.manager.service.service.third.impl.WeChatSyncInfoService - 开始拉取6092106到6092206的聊天记录

2024/8/3 下午2:36:34 An irrecoverable stack overflow has occurred.

2024/8/3 下午2:36:34 Please check if any of your loaded .so files has enabled executable stack (see man page execstack(8))

2024/8/3 下午2:36:34 #

2024/8/3 下午2:36:34 # A fatal error has been detected by the Java Runtime Environment:

2024/8/3 下午2:36:34 #

2024/8/3 下午2:36:34 #  SIGSEGV (0xb) at pc=0x00007fe3bafecdcd, pid=6, tid=667

2024/8/3 下午2:36:34 #

2024/8/3 下午2:36:34 # JRE version: Java(TM) SE Runtime Environment (17.0.3.1+2) (build 17.0.3.1+2-LTS-6)

2024/8/3 下午2:36:34 # Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0.3.1+2-LTS-6, mixed mode, sharing, tiered, compressed class ptrs, z gc, linux-amd64)

2024/8/3 下午2:36:34 # Problematic frame:

2024/8/3 下午2:36:34 # C  [libWeWorkFinanceSdk_Java.so+0x1fedcd]  ConvertToJava(JNIEnv_*, std::string const&)+0x103

2024/8/3 下午2:36:34 #

2024/8/3 下午2:36:34 # Core dump will be written. Default location: //core.6

2024/8/3 下午2:36:34 #

2024/8/3 下午2:36:34 # An error report file with more information is saved as:

2024/8/3 下午2:36:34 # //hs_err_pid6.log

2024/8/3 下午2:36:34 #

2024/8/3 下午2:36:34 # If you would like to submit a bug report, please visit:

2024/8/3 下午2:36:34 #   https://bugreport.java.com/bugreport/crash.jsp

2024/8/3 下午2:36:34 # The crash happened outside the Java Virtual Machine in native code.

2024/8/3 下午2:36:34 # See problematic frame for where to report the bug.

2024/8/3 下午2:36:34 #

2024/8/3 下午2:36:45 Aborted (core dumped)

回答关注问题邀请回答
收藏

1 个回答

  • 社区技术运营专员--许涛
    社区技术运营专员--许涛
    08-07

    你好,企业微信相关问题请到企业微信社区咨询:https://developer.work.weixin.qq.com/community/question

    08-07
    有用
    回复
登录 后发表内容