{"record":{"id":"5ebca1c6bcfee8a2","repo":"apache/rocketmq","slug":"consumefromwhere-is-null","errorCode":null,"errorMessage":"consumeFromWhere is null","messagePattern":"consumeFromWhere is null","errorType":"validation","errorClass":"MQClientException","httpStatus":null,"severity":"error","filePath":"client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPushConsumerImpl.java","lineNumber":1052,"sourceCode":"\n        if (this.defaultMQPushConsumer.getConsumerGroup().equals(MixAll.DEFAULT_CONSUMER_GROUP)) {\n            throw new MQClientException(\n                \"consumerGroup can not equal \"\n                    + MixAll.DEFAULT_CONSUMER_GROUP\n                    + \", please specify another one.\"\n                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),\n                null);\n        }\n\n        if (null == this.defaultMQPushConsumer.getMessageModel()) {\n            throw new MQClientException(\n                \"messageModel is null\"\n                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),\n                null);\n        }\n\n        if (null == this.defaultMQPushConsumer.getConsumeFromWhere()) {\n            throw new MQClientException(\n                \"consumeFromWhere is null\"\n                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),\n                null);\n        }\n\n        Date dt = UtilAll.parseDate(this.defaultMQPushConsumer.getConsumeTimestamp(), UtilAll.YYYYMMDDHHMMSS);\n        if (null == dt) {\n            throw new MQClientException(\n                \"consumeTimestamp is invalid, the valid format is yyyyMMddHHmmss,but received \"\n                    + this.defaultMQPushConsumer.getConsumeTimestamp()\n                    + \" \" + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL), null);\n        }\n\n        // allocateMessageQueueStrategy\n        if (null == this.defaultMQPushConsumer.getAllocateMessageQueueStrategy()) {\n            throw new MQClientException(\n                \"allocateMessageQueueStrategy is null\"\n                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),","sourceCodeStart":1034,"sourceCodeEnd":1070,"githubUrl":"https://github.com/apache/rocketmq/blob/293f5885719fc4aa3619446a1900f58ccfcfdd29/client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPushConsumerImpl.java#L1034-L1070","documentation":"checkConfig() requires consumeFromWhere (CONSUME_FROM_LAST_OFFSET, CONSUME_FROM_FIRST_OFFSET, or CONSUME_FROM_MIN_OFFSET) to be set. Like messageModel, this field has a default (CONSUME_FROM_LAST_OFFSET), so null indicates an explicit null assignment or an aggressive mock/reflection setup.","triggerScenarios":"Calling setConsumeFromWhere(null); reflective object construction (e.g. serialization frameworks or unit-test mocks) that bypasses field initializers.","commonSituations":"Deserializing consumer configuration from JSON/YAML where the consumeFromWhere key maps to null; hand-rolled builders copying null fields.","solutions":["Always set consumeFromWhere explicitly (CONSUME_FROM_LAST_OFFSET is the conventional default for new groups)","Treat null in deserialized config as an error and reject it during config load","Avoid setConsumeFromWhere(null); keep the field default if you have no preference"],"exampleFix":"// before\nconsumer.setConsumeFromWhere(null);\n\n// after\nconsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);","handlingStrategy":"validation","validationCode":"ConsumeFromWhere where = config.getConsumeFromWhere() != null\n    ? config.getConsumeFromWhere() : ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET;\nconsumer.setConsumeFromWhere(where);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set consumeFromWhere explicitly in the consumer factory","Treat null deserialized enum fields as config errors at load time"],"tags":["rocketmq","config","consume-from-where","validation"],"backgroundTag":null,"analyzedSha":"293f5885719fc4aa3619446a1900f58ccfcfdd29","analyzedAt":"2026-08-14T11:50:13.822Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}