{"record":{"id":"d30c304db5353b1e","repo":"paascloud/paascloud-master","slug":"tpc10050002","errorCode":"TPC10050002","errorMessage":"TPC10050002","messagePattern":"TPC10050002","errorType":"error_code","errorClass":"TpcBizException","httpStatus":null,"severity":"error","filePath":"paascloud-provider/paascloud-provider-tpc/src/main/java/com/paascloud/provider/service/impl/TpcMqMessageServiceImpl.java","lineNumber":88,"sourceCode":"\tpublic void saveMessageWaitingConfirm(TpcMqMessageDto messageDto) {\n\n\t\tif (StringUtils.isEmpty(messageDto.getMessageTopic())) {\n\t\t\tthrow new TpcBizException(ErrorCodeEnum.TPC10050001);\n\t\t}\n\n\t\tDate now = new Date();\n\t\tTpcMqMessage message = new ModelMapper().map(messageDto, TpcMqMessage.class);\n\t\tmessage.setMessageStatus(MqSendStatusEnum.WAIT_SEND.sendStatus());\n\t\tmessage.setUpdateTime(now);\n\t\tmessage.setCreatedTime(now);\n\t\ttpcMqMessageMapper.insertSelective(message);\n\t}\n\n\t@Override\n\tpublic void confirmAndSendMessage(String messageKey) {\n\t\tfinal TpcMqMessage message = tpcMqMessageMapper.getByMessageKey(messageKey);\n\t\tif (message == null) {\n\t\t\tthrow new TpcBizException(ErrorCodeEnum.TPC10050002);\n\t\t}\n\n\t\tTpcMqMessage update = new TpcMqMessage();\n\t\tupdate.setMessageStatus(MqSendStatusEnum.SENDING.sendStatus());\n\t\tupdate.setId(message.getId());\n\t\tupdate.setUpdateTime(new Date());\n\t\ttpcMqMessageMapper.updateByPrimaryKeySelective(update);\n\t\t// 创建消费待确认列表\n\t\tthis.createMqConfirmListByTopic(message.getMessageTopic(), message.getId(), message.getMessageKey());\n\t\t// 直接发送消息\n\t\tthis.directSendMessage(message.getMessageBody(), message.getMessageTopic(), message.getMessageTag(), message.getMessageKey(), message.getProducerGroup(), message.getDelayLevel());\n\t}\n\n\t@Override\n\tpublic void saveAndSendMessage(TpcMqMessageDto tpcMqMessageDto) {\n\t\tif (StringUtils.isEmpty(tpcMqMessageDto.getMessageTopic())) {\n\t\t\tthrow new TpcBizException(ErrorCodeEnum.TPC10050001);\n\t\t}","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/paascloud/paascloud-master/blob/781281a9503332ed3cef44ea618349d14230a127/paascloud-provider/paascloud-provider-tpc/src/main/java/com/paascloud/provider/service/impl/TpcMqMessageServiceImpl.java#L70-L106","documentation":"TPC10050002 means no TPC MQ message exists for the given messageKey. confirmAndSendMessage looks the message up by key and throws when the lookup returns null, so the confirm-and-send flow cannot proceed.","triggerScenarios":"Calling confirmAndSendMessage with a messageKey that was never saved (no prior saveMessageWaitingConfirm), a typo'd key, or a key whose row was deleted/purged.","commonSituations":"Sender uses a locally generated key that differs from the stored one; message already processed and deleted; environment mismatch pointing at a different database.","solutions":["Confirm the messageKey matches exactly the key returned/stored when the message was created.","Verify the message record still exists (tpc_mq_message table) and hasn't been deleted by cleanup jobs.","Ensure the same environment/database is used for save and confirm.","Call saveMessageWaitingConfirm first when the message hasn't been pre-stored."],"exampleFix":"// before\ntpcMqMessageService.confirmAndSendMessage(messageKey); // throws if key unknown\n// after\nTpcMqMessageDto dto = new TpcMqMessageDto();\ndto.setMessageKey(key);\ndto.setMessageTopic(topic);\ntpcMqMessageService.saveMessageWaitingConfirm(dto);\ntpcMqMessageService.confirmAndSendMessage(key);","handlingStrategy":"validation","validationCode":"// verify the key was stored: query the list of reliable messages or persist the key when saving\nboolean known = storedKeys.contains(messageKey);","typeGuard":null,"tryCatchPattern":"try {\n    tpcMqMessageService.confirmAndSendMessage(messageKey);\n} catch (TpcBizException e) {\n    if (\"TPC10050002\".equals(e.getMessage())) { /* recreate or requeue the message */ }\n    throw e;\n}","preventionTips":["Persist the generated messageKey before confirming","Use one canonical key-generation step shared by save and confirm","Never delete messages still awaiting confirm"],"tags":["mq","message-key","not-found"],"backgroundTag":"record-not-found","analyzedSha":"781281a9503332ed3cef44ea618349d14230a127","analyzedAt":"2026-09-10T10:59:02.070Z","contentChangedAt":"2026-09-10T10:59:02.070Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}