{"record":{"id":"3e2c1f1d033c1752","repo":"apache/rocketmq","slug":"consumer-group-is-not-allowed-to-consume","errorCode":null,"errorMessage":"Consumer group is not allowed to consume.","messagePattern":"Consumer group is not allowed to consume\\.","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"broker/src/main/java/org/apache/rocketmq/broker/processor/LiteSubscriptionCtlProcessor.java","lineNumber":118,"sourceCode":"                    case COMPLETE_REMOVE:\n                        this.liteSubscriptionRegistry.removeCompleteSubscription(clientId);\n                        break;\n                }\n            }\n            return RemotingCommand.createResponseCommand(ResponseCode.SUCCESS, null);\n        } catch (LiteQuotaException e) {\n            return RemotingCommand.createResponseCommand(ResponseCode.LITE_SUBSCRIPTION_QUOTA_EXCEEDED, e.toString());\n        } catch (IllegalStateException e) {\n            return RemotingCommand.createResponseCommand(ResponseCode.ILLEGAL_OPERATION, e.toString());\n        } catch (Exception e) {\n            log.error(\"LiteSubscriptionCtlProcessor error\", e);\n            return RemotingCommand.createResponseCommand(ResponseCode.SYSTEM_ERROR, e.toString());\n        }\n    }\n\n    private void checkConsumeEnable(String group) {\n        if (!LiteMetadataUtil.isConsumeEnable(group, brokerController)) {\n            throw new IllegalStateException(\"Consumer group is not allowed to consume.\");\n        }\n    }\n\n    private Set<String> toLmqNameSet(LiteSubscriptionDTO liteSubscriptionDTO) {\n        if (CollectionUtils.isEmpty(liteSubscriptionDTO.getLiteTopicSet())) {\n            return Collections.emptySet();\n        }\n        return liteSubscriptionDTO.getLiteTopicSet().stream()\n            .map(liteTopic -> LiteUtil.toLmqName(liteSubscriptionDTO.getTopic(), liteTopic))\n            .collect(Collectors.toSet());\n    }\n\n}\n","sourceCodeStart":100,"sourceCodeEnd":132,"githubUrl":"https://github.com/apache/rocketmq/blob/293f5885719fc4aa3619446a1900f58ccfcfdd29/broker/src/main/java/org/apache/rocketmq/broker/processor/LiteSubscriptionCtlProcessor.java#L100-L132","documentation":"LiteSubscriptionCtlProcessor (lightweight/LMQ subscription control) rejects the operation because LiteMetadataUtil.isConsumeEnable(group, broker) returned false — the group's lite-subscription metadata explicitly forbids consuming. Thrown as IllegalStateException, surfaced to the caller as ILLEGAL_OPERATION.","triggerScenarios":"Any lite-subscription operation path guarded by checkConsumeEnable() when the group's metadata entry consumeEnable=false or is absent for this broker.","commonSituations":"Group suspended/quota-disabled by an operator; lite subscription metadata not created or not propagated; test environment groups left disabled.","solutions":["Update the group's lite subscription metadata to set consumeEnable=true (update lite subscription API/config).","Verify the group exists in lite metadata on this broker and was created via the lite subscription API.","If it was disabled due to quota (LiteQuotaException path), reduce usage or raise the quota first."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (!LiteMetadataUtil.isConsumeEnable(group, brokerController)) {\n    // enable in lite subscription metadata or reject the request client-side\n}","typeGuard":null,"tryCatchPattern":"catch (IllegalStateException e) { if (e.getMessage().contains(\"not allowed to consume\")) { reenableGroupInMetadata(group); } throw e; }","preventionTips":["Provision lite subscription metadata (consumeEnable=true) before attaching consumers.","Track which groups were administratively disabled so ops knows why consumption fails."],"tags":["rocketmq","broker","lite-subscription","lmq","consumer-group","metadata"],"backgroundTag":null,"analyzedSha":"293f5885719fc4aa3619446a1900f58ccfcfdd29","analyzedAt":"2026-08-14T11:50:13.822Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}