apache/rocketmq · error · MQClientException
consumeThreadMin Out of range [1, 1000]
Error message
consumeThreadMin Out of range [1, 1000]
What it means
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.
Source
Thrown at client/src/main/java/org/apache/rocketmq/client/impl/consumer/DefaultMQPushConsumerImpl.java:1102
throw new MQClientException(
"messageListener is null"
+ FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),
null);
}
boolean orderly = this.defaultMQPushConsumer.getMessageListener() instanceof MessageListenerOrderly;
boolean concurrently = this.defaultMQPushConsumer.getMessageListener() instanceof MessageListenerConcurrently;
if (!orderly && !concurrently) {
throw new MQClientException(
"messageListener must be instanceof MessageListenerOrderly or MessageListenerConcurrently"
+ FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),
null);
}
// consumeThreadMin
if (this.defaultMQPushConsumer.getConsumeThreadMin() < 1
|| this.defaultMQPushConsumer.getConsumeThreadMin() > 1000) {
throw new MQClientException(
"consumeThreadMin Out of range [1, 1000]"
+ FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),
null);
}
// consumeThreadMax
if (this.defaultMQPushConsumer.getConsumeThreadMax() < 1 || this.defaultMQPushConsumer.getConsumeThreadMax() > 1000) {
throw new MQClientException(
"consumeThreadMax Out of range [1, 1000]"
+ FAQUrl.suggestTodo(FAQUrl.CLIENT_PARAMETER_CHECK_URL),
null);
}
// consumeThreadMin can't be larger than consumeThreadMax
if (this.defaultMQPushConsumer.getConsumeThreadMin() > this.defaultMQPushConsumer.getConsumeThreadMax()) {
throw new MQClientException(
"consumeThreadMin (" + this.defaultMQPushConsumer.getConsumeThreadMin() + ") "
+ "is larger than consumeThreadMax (" + this.defaultMQPushConsumer.getConsumeThreadMax() + ")",View on GitHub (pinned to 293f588571)
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
Example fix
// before consumer.setConsumeThreadMin(0); // invalid // after consumer.setConsumeThreadMin(20);
Defensive patterns
Strategy: validation
Validate before calling
int min = config.getConsumeThreadMin();
if (min < 1 || min > 1000) throw new IllegalArgumentException("consumeThreadMin must be in [1,1000]: " + min);
consumer.setConsumeThreadMin(min); Type guard
boolean inThreadRange(int v) { return v >= 1 && v <= 1000; } Prevention
- Reject 0/-1 sentinel values for thread counts in config validation
- Range-check all consumer numeric settings in one validate method before start
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- consumeThreadMax Out of range [1, 1000]
- consumerGroup can not equal
- consumerGroup is null
- messageModel is null
- consumeFromWhere is null
AI-assisted analysis of apache/rocketmq@293f588571 (2026-08-14).
Data as JSON: /api/errors/282464ffae9df777.
Report an issue: GitHub.