{"record":{"id":"d4a2d2c035ae378d","repo":"alibaba/spring-cloud-alibaba","slug":"the-message-queue-is-not-in-assigned-list","errorCode":null,"errorMessage":"The message queue is not in assigned list","messagePattern":"The message queue is not in assigned list","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"warning","filePath":"spring-cloud-alibaba-starters/spring-cloud-starter-stream-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/inbound/pull/RocketMQMessageSource.java","lineNumber":167,"sourceCode":"\t\t}\n\t\tif (messageExtIterator == null) {\n\t\t\tList<MessageExt> messageExtList = consumer.poll();\n\t\t\tif (CollectionUtils.isEmpty(messageExtList)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tmessageExtIterator = messageExtList.iterator();\n\t\t}\n\t\tMessageExt messageExt = messageExtIterator.next();\n\t\tif (!messageExtIterator.hasNext()) {\n\t\t\tmessageExtIterator = null;\n\t\t}\n\t\tif (null == messageExt) {\n\t\t\treturn null;\n\t\t}\n\t\tMessageQueue messageQueue = this.acquireCurrentMessageQueue(messageExt.getTopic(),\n\t\t\t\tmessageExt.getQueueId(), messageExt.getBrokerName());\n\t\tif (messageQueue == null) {\n\t\t\tthrow new IllegalArgumentException(\n\t\t\t\t\t\"The message queue is not in assigned list\");\n\t\t}\n\t\tMessage message = RocketMQMessageConverterSupport\n\t\t\t\t.convertMessage2Spring(messageExt);\n\t\treturn MessageBuilder.fromMessage(message)\n\t\t\t\t.setHeader(IntegrationMessageHeaderAccessor.ACKNOWLEDGMENT_CALLBACK,\n\t\t\t\t\t\tnew RocketMQAckCallback(this.consumer, messageQueue, messageExt))\n\t\t\t\t.build();\n\t}\n\n\t@Override\n\tpublic String getComponentType() {\n\t\treturn \"rocketmq:message-source\";\n\t}\n\n}\n","sourceCodeStart":149,"sourceCodeEnd":184,"githubUrl":"https://github.com/alibaba/spring-cloud-alibaba/blob/115d5901102009492e05d5ec18c3f79cad4077d0/spring-cloud-alibaba-starters/spring-cloud-starter-stream-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/integration/inbound/pull/RocketMQMessageSource.java#L149-L184","documentation":"During pull-consumer doReceive, the adapter maps the pulled message's (topic, queueId, brokerName) to a MessageQueue in the locally cached assigned set (messageQueuesForTopic). If no match is found it throws IllegalArgumentException. This happens when the assignment cache is stale relative to a rebalance that moved that queue away.","triggerScenarios":"A polled MessageExt references a queue not present in messageQueuesForTopic (stale assignment cache after rebalance, broker name mismatch, or topic namespace drift).","commonSituations":"Cluster rebalance reassigning queues between polls; broker failover changing brokerName; namespace/nameserver mismatch so the cached set is for a different logical topic; a race between the TopicMessageQueueChangeListener update and poll.","solutions":["Catch and treat as a transient condition: skip/retry the next poll so the assignment cache refreshes.","Ensure the TopicMessageQueueChangeListener fires and messageQueuesForTopic updates after rebalance.","Verify name-server/namespace consistency so the assigned set matches the broker's view."],"exampleFix":"// before\nMessageQueue mq = acquireCurrentMessageQueue(topic, queueId, brokerName);\nif (mq == null) throw new IllegalArgumentException(...); // raw\n// after - tolerate stale assignment\nMessageQueue mq = acquireCurrentMessageQueue(topic, queueId, brokerName);\nif (mq == null) {\n    log.warn(\"Queue {}@{} not in assigned list; skipping (rebalance?)\", queueId, brokerName);\n    return null; // caller will poll again\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// Treat the 'not in assigned list' throw as a soft skip in the poll loop.\ntry {\n    return source.receive();\n} catch (IllegalArgumentException ex) {\n    if (ex.getMessage() != null && ex.getMessage().contains(\"not in assigned list\")) {\n        log.debug(\"Transient assignment mismatch, will retry next poll\");\n        return null;\n    }\n    throw ex;\n}","preventionTips":["Expect queue assignment to lag rebalance; design poll loops to skip/retry.","Keep the TopicMessageQueueChangeListener wired so the cache refreshes.","Align name-server and namespace across producer/consumer."],"tags":["rocketmq","consumer","pull","rebalance","transient"],"backgroundTag":null,"analyzedSha":"115d5901102009492e05d5ec18c3f79cad4077d0","analyzedAt":"2026-08-14T04:47:13.900Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}