qianye1001 commented on issue #10345:
URL: https://github.com/apache/rocketmq/issues/10345#issuecomment-4541140577

   ## Bug Confirmed
   
   **Root Cause:** In `ReceiveMessageActivity.handleAutoRenew()`, 
`MessageReceiptHandle` is constructed with the 7-arg constructor which does NOT 
pass `liteTopic` (defaults to `null`):
   
   ```java
   MessageReceiptHandle messageReceiptHandle =
       new MessageReceiptHandle(group, topic, messageExt.getQueueId(), 
receiptHandle,
           messageExt.getMsgId(), messageExt.getQueueOffset(), 
messageExt.getReconsumeTimes());
   ```
   
   **Impact:** When `ReceiptHandleProcessor` later performs auto-renew, it 
calls `messageReceiptHandle.getLiteTopic()` which returns `null`. This causes 
`ChangeInvisibleTimeRequestHeader#liteTopic` to be empty, so broker cannot 
enter the lite-topic-specific renewal path. Lite consumer messages may fail to 
extend invisible time during long-running consumption, leading to early 
redelivery or duplicate delivery.
   
   **Comparison with explicit client requests:** Both `AckMessageActivity` and 
`ChangeInvisibleDurationActivity` correctly extract `liteTopic` from the SDK 
request — the bug only affects proxy auto-renew.
   
   **Suggested Fix:** Extract `liteTopic` from `MessageExt` and pass it to the 
8-arg constructor:
   
   ```java
   String liteTopic = messageExt.getProperty(MessageConst.PROPERTY_LITE_TOPIC);
   MessageReceiptHandle messageReceiptHandle =
       new MessageReceiptHandle(group, topic, messageExt.getQueueId(), 
receiptHandle,
           messageExt.getMsgId(), messageExt.getQueueOffset(), 
messageExt.getReconsumeTimes(), liteTopic);
   ```
   
   **Labels needed:** `type/bug`, `module/proxy`


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to