// 单次拉取消息的最大条数 此处为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)
你好,企业微信相关问题请到企业微信社区咨询:https://developer.work.weixin.qq.com/community/question