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]