apache/rocketmq · error · AuthorizationException

messageQueue is null.

Error message

messageQueue is null.

What it means

Error "messageQueue is null." thrown in apache/rocketmq.

Source

Thrown at auth/src/main/java/org/apache/rocketmq/auth/authorization/builder/DefaultAuthorizationContextBuilder.java:145

            result = newPubContext(metadata, request.getTopic());
        }
        if (message instanceof EndTransactionRequest) {
            EndTransactionRequest request = (EndTransactionRequest) message;
            result = newPubContext(metadata, request.getTopic());
        }
        if (message instanceof HeartbeatRequest) {
            HeartbeatRequest request = (HeartbeatRequest) message;
            if (StringUtils.isNotBlank(request.getGroup().getName())) {
                if (request.getClientType() == ClientType.PRODUCER) {
                    throw new AuthorizationException("group is not allowed for producer heartbeat.");
                }
                result = newGroupSubContexts(metadata, request.getGroup());
            }
        }
        if (message instanceof ReceiveMessageRequest) {
            ReceiveMessageRequest request = (ReceiveMessageRequest) message;
            if (!request.hasMessageQueue()) {
                throw new AuthorizationException("messageQueue is null.");
            }
            result = newSubContexts(metadata, request.getGroup(), request.getMessageQueue().getTopic());
        }
        if (message instanceof SyncLiteSubscriptionRequest) {
            SyncLiteSubscriptionRequest request = (SyncLiteSubscriptionRequest) message;
            result = newSubContexts(metadata, request.getGroup(), request.getTopic());
        }
        if (message instanceof AckMessageRequest) {
            AckMessageRequest request = (AckMessageRequest) message;
            result = newSubContexts(metadata, request.getGroup(), request.getTopic());
        }
        if (message instanceof ForwardMessageToDeadLetterQueueRequest) {
            ForwardMessageToDeadLetterQueueRequest request = (ForwardMessageToDeadLetterQueueRequest) message;
            result = newSubContexts(metadata, request.getGroup(), request.getTopic());
        }
        if (message instanceof NotifyClientTerminationRequest) {
            NotifyClientTerminationRequest request = (NotifyClientTerminationRequest) message;
            if (StringUtils.isNotBlank(request.getGroup().getName())) {

View on GitHub (pinned to 293f588571)

Solutions

  1. Ensure the request includes a valid MessageQueue (topic, brokerName, queueId) before sending it to the broker.
  2. Check client code that constructs ack/peek/pull requests so messageQueue is always populated.
  3. Verify serialization between client and broker versions does not drop the messageQueue field.

When it happens

Trigger: Occurs when building an authorization context for a request whose message queue field is null.

Common situations: Pull/pop/ack requests missing the message queue header, or the header failed to parse.


AI-assisted analysis of apache/rocketmq@293f588571 (2026-08-14). Data as JSON: /api/errors/47e51ba9bf0e784d. Report an issue: GitHub.