paascloud/paascloud-master · error · TpcBizException
GL99990002
GL99990002
Error message
GL99990002
What it means
GL99990002 (platform generic remote-call-failure error) is thrown by UacRpcService.queryWaitingConfirmMessageKeyList when the Feign call to uacMqMessageFeignApi.queryMessageKeyList returns a null Wrapper. Because the code then calls wrapper.getResult() on success, a null envelope is rejected up-front with a TpcBizException rather than a NullPointerException.
Solutions
- Check UAC service health/registration and the Feign client's service name configuration.
- Find the underlying Feign exception in logs that caused the null Wrapper (timeout, connect failure).
- Stop returning null from Feign fallbacks; return an error Wrapper or throw so callers can distinguish failure from an empty key list.
- Note an empty list is a valid result (all messages confirmed) — make sure fallbacks don't fake it; check wrapper.getResult() semantics.
- Add retries with backoff for this confirm-polling path, and alert on sustained GL99990002 occurrences.
Example fix
// before: null wrapper aborts the confirmation flow
List<String> keys = uacRpcService.queryWaitingConfirmMessageKeyList(messageKeys);
// after: handle RPC failure explicitly
List<String> keys;
try {
keys = uacRpcService.queryWaitingConfirmMessageKeyList(messageKeys);
} catch (TpcBizException e) {
log.warn("UAC unavailable, deferring confirmation of {} messages", messageKeys.size(), e);
return; // retry on next poll
} Defensive patterns
Strategy: try-catch
Try / catch
try {
List<String> keys = uacRpcService.queryWaitingConfirmMessageKeyList(messageKeys);
confirm(keys);
} catch (TpcBizException e) {
if (e.getCode() == 99990002L) {
log.warn("UAC unavailable — deferring message confirmation");
return; // next polling cycle retries
}
throw e;
} Prevention
- Return error Wrappers, never null, from Feign fallbacks.
- Design confirmation polling to tolerate skipped cycles.
- Health-check UAC before batch confirm jobs.
- Distinguish empty list (all confirmed) from RPC failure in your logic.
- Alert on repeated GL99990002 from the confirm flow — messages pile up unconfirmed.
When it happens
Trigger: Calling queryWaitingConfirmConfirmMessageKeyList — i.e. UacRpcService.queryWaitingConfirmMessageKeyList(messageKeyList) — when uacMqMessageFeignApi.queryMessageKeyList returns null: UAC service unavailable, timed out, or its Feign fallback returned null.
Common situations: UAC service down during MQ message-confirmation processing; timeouts under load; UAC endpoint changed/renamed breaking the Feign contract; fallback methods returning null to 'soft fail'.
Related errors
AI-assisted analysis of paascloud/paascloud-master@781281a950 (2026-09-10).
Data as JSON: /api/errors/7c5ef74fdf1386d9.
Report an issue: GitHub.
Appendix: source
Thrown at paascloud-provider/paascloud-provider-tpc/src/main/java/com/paascloud/provider/service/UacRpcService.java:62
public void batchUpdateTokenOffLine() {
Wrapper<Integer> wrapper = uacUserTokenFeignApi.updateTokenOffLine();
if (wrapper == null) {
log.error("updateTokenOffLine 失败 result is null");
return;
}
Integer result = wrapper.getResult();
if (result == null || result == 0) {
log.error("updateTokenOffLine 失败");
} else {
log.error("updateTokenOffLine 成功");
}
}
public List<String> queryWaitingConfirmMessageKeyList(List<String> messageKeyList) {
Wrapper<List<String>> wrapper = uacMqMessageFeignApi.queryMessageKeyList(messageKeyList);
if (wrapper == null) {
log.error("queryWaitingConfirmMessageKeyList 失败 result is null");
throw new TpcBizException(ErrorCodeEnum.GL99990002);
}
return wrapper.getResult();
}
public Wrapper<PageInfo<MqMessageVo>> queryMessageListWithPage(MessageQueryDto messageQueryDto) {
Wrapper<PageInfo<MqMessageVo>> wrapper = uacMqMessageFeignApi.queryMessageListWithPage(messageQueryDto);
if (wrapper == null) {
log.error("查询消息记录 失败 result is null");
throw new TpcBizException(ErrorCodeEnum.GL99990002);
}
return wrapper;
}
}View on GitHub (pinned to 781281a950)