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

  1. Check UAC service health/registration and the Feign client's service name configuration.
  2. Find the underlying Feign exception in logs that caused the null Wrapper (timeout, connect failure).
  3. Stop returning null from Feign fallbacks; return an error Wrapper or throw so callers can distinguish failure from an empty key list.
  4. Note an empty list is a valid result (all messages confirmed) — make sure fallbacks don't fake it; check wrapper.getResult() semantics.
  5. 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

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)