{"record":{"id":"282464ffae9df777","repo":"apache/rocketmq","slug":"consumethreadmin-out-of-range-1-1000","errorCode":null,"errorMessage":"consumeThreadMin Out of range [1, 1000]","messagePattern":"consumeThreadMin Out of range \\[1, 1000\\]","errorType":"validation","errorClass":"MQClientException","httpStatus":null,"severity":"error","filePath":"client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPushConsumerImpl.java","lineNumber":1102,"sourceCode":"            throw new MQClientException(\n                \"messageListener is null\"\n                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),\n                null);\n        }\n\n        boolean orderly = this.defaultMQPushConsumer.getMessageListener() instanceof MessageListenerOrderly;\n        boolean concurrently = this.defaultMQPushConsumer.getMessageListener() instanceof MessageListenerConcurrently;\n        if (!orderly && !concurrently) {\n            throw new MQClientException(\n                \"messageListener must be instanceof MessageListenerOrderly or MessageListenerConcurrently\"\n                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),\n                null);\n        }\n\n        // consumeThreadMin\n        if (this.defaultMQPushConsumer.getConsumeThreadMin() < 1\n            || this.defaultMQPushConsumer.getConsumeThreadMin() > 1000) {\n            throw new MQClientException(\n                \"consumeThreadMin Out of range [1, 1000]\"\n                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),\n                null);\n        }\n\n        // consumeThreadMax\n        if (this.defaultMQPushConsumer.getConsumeThreadMax() < 1 || this.defaultMQPushConsumer.getConsumeThreadMax() > 1000) {\n            throw new MQClientException(\n                \"consumeThreadMax Out of range [1, 1000]\"\n                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),\n                null);\n        }\n\n        // consumeThreadMin can't be larger than consumeThreadMax\n        if (this.defaultMQPushConsumer.getConsumeThreadMin() > this.defaultMQPushConsumer.getConsumeThreadMax()) {\n            throw new MQClientException(\n                \"consumeThreadMin (\" + this.defaultMQPushConsumer.getConsumeThreadMin() + \") \"\n                    + \"is larger than consumeThreadMax (\" + this.defaultMQPushConsumer.getConsumeThreadMax() + \")\",","sourceCodeStart":1084,"sourceCodeEnd":1120,"githubUrl":"https://github.com/apache/rocketmq/blob/293f5885719fc4aa3619446a1900f58ccfcfdd29/client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPushConsumerImpl.java#L1084-L1120","documentation":"checkConfig() validates the consume-thread pool's minimum thread count: it must be between 1 and 1000 inclusive. consumeThreadMin defaults to 20, so this fires only when the value was explicitly changed to 0, a negative number, or something above 1000.","triggerScenarios":"setConsumeThreadMin(0) (often intended to 'use default'); values >1000 from misread config (e.g. copying a millis value into a thread count); property binding a missing key to 0.","commonSituations":"Config keys like consume-thread-min: 0 meaning 'auto' in the app's convention but invalid in RocketMQ; environment overrides that were never type-reviewed after a config-schema change.","solutions":["Set consumeThreadMin within [1,1000]; typical values 20 (default) or sized near CPU cores","Fix the source config value; treat 0/-1 sentinels as errors at config-load time","Also ensure consumeThreadMin <= consumeThreadMax or error 236 follows"],"exampleFix":"// before\nconsumer.setConsumeThreadMin(0); // invalid\n\n// after\nconsumer.setConsumeThreadMin(20);","handlingStrategy":"validation","validationCode":"int min = config.getConsumeThreadMin();\nif (min < 1 || min > 1000) throw new IllegalArgumentException(\"consumeThreadMin must be in [1,1000]: \" + min);\nconsumer.setConsumeThreadMin(min);","typeGuard":"boolean inThreadRange(int v) { return v >= 1 && v <= 1000; }","tryCatchPattern":null,"preventionTips":["Reject 0/-1 sentinel values for thread counts in config validation","Range-check all consumer numeric settings in one validate method before start"],"tags":["rocketmq","config","thread-pool","validation"],"backgroundTag":null,"analyzedSha":"293f5885719fc4aa3619446a1900f58ccfcfdd29","analyzedAt":"2026-08-14T11:50:13.822Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}