{"record":{"id":"29804ab7dca990d6","repo":"paascloud/paascloud-master","slug":"tpc10050003","errorCode":"TPC10050003","errorMessage":"TPC10050003","messagePattern":"TPC10050003","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":156,"sourceCode":"\t\tthis.resendMessage(task);\n\t}\n\n\t@Override\n\tpublic void setMessageToAlreadyDead(Long messageId) {\n\t\tfinal TpcMqMessage task = tpcMqMessageMapper.selectByPrimaryKey(messageId);\n\t\tif (task == null) {\n\t\t\tthrow new TpcBizException(ErrorCodeEnum.TPC10050006);\n\t\t}\n\n\t\ttpcMqMessageMapper.updateAlreadyDeadByMessageId(messageId);\n\t}\n\n\t@Override\n\tpublic void deleteMessageByMessageKey(String messageKey) {\n\n\t\tint result = tpcMqMessageMapper.deleteMessageByMessageKey(messageKey);\n\t\tif (result < 1) {\n\t\t\tthrow new TpcBizException(ErrorCodeEnum.TPC10050003, messageKey);\n\t\t}\n\t}\n\n\t@Override\n\tpublic void resendAllDeadMessageByTopicName(String topicName, int batchSize) {\n\t\t// 1.查询该topic下所有死亡的消息\n\t\t// 2.分页\n\t}\n\n\t@Override\n\tpublic List<TpcMqMessage> listMessageForWaitingProcess(MessageTaskQueryDto query) {\n\t\treturn tpcMqMessageMapper.listMessageForWaitingProcess(query);\n\t}\n\n\t@Override\n\tpublic void confirmReceiveMessage(final String cid, final String messageKey) {\n\t\t// 1. 校验cid\n\t\t// 2. 校验messageKey","sourceCodeStart":138,"sourceCodeEnd":174,"githubUrl":"https://github.com/paascloud/paascloud-master/blob/781281a9503332ed3cef44ea618349d14230a127/paascloud-provider/paascloud-provider-tpc/src/main/java/com/paascloud/provider/service/impl/TpcMqMessageServiceImpl.java#L138-L174","documentation":"Fires in TpcMqMessageServiceImpl.deleteMessageByMessageKey when tpcMqMessageMapper.deleteMessageByMessageKey returns fewer than 1 affected rows, i.e. no message with the supplied messageKey existed to delete. Maps to ErrorCodeEnum.TPC10050003 with the offending messageKey passed as an exception argument; the caller should verify the messageKey.","triggerScenarios":"Calling deleteMessageByMessageKey with a key that doesn't exist, or deleting an already-deleted message (second call).","commonSituations":"Double delete from a retrying consumer; typo'd or truncated messageKey; cleanup job already removed the row.","solutions":["Verify the messageKey exists before deleting, or tolerate idempotent deletes.","Remove the second delete call in retry/idempotent flows.","Check for row-removal races with scheduled cleanup jobs."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// existence check: only delete keys known to exist\nboolean exists = tpcMqMessageService.listReliableMessageVo(Collections.singletonList(id)).size() > 0;","typeGuard":null,"tryCatchPattern":"try {\n    tpcMqMessageService.deleteMessageByMessageKey(messageKey);\n} catch (TpcBizException e) {\n    if (\"TPC10050003\".equals(e.getMessage())) { /* treat as idempotent success */ return; }\n    throw e;\n}","preventionTips":["Avoid double deletes in retry paths","Log the first successful delete and skip repeats","Mind cleanup jobs racing with manual deletes"],"tags":["mq","delete","not-found","idempotency"],"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"}