Consume Message
NM.Topic = PROPERTY_REAL_TOPIC
Process sendMessageBack
Pull Message
Re-Deliver
Timeup
NM.PROPERTY_REAL_TOPIC= %RETRY%CG
NM.QueueId = DelayLV - 1
Dispatch NM into ConsumeQueueNM.Tag = DeliverTime
Broker
NM = lookMessageByOffset
Schedule Delay Messages
Change
Report Subscription To Broker
Result
Persistence
Backup Real Topic toPROPERTY_RETRY_TOPIC
Consume sendMessageBack
return RECONSUME_LATER
MessageStore.putMessage
Success
Consumer
NM.Topic = 'SCHEDULE_TOPIC_XXXX'
Delete From ProcessQueue
Failed
Create New Message (NM)
Append NM into CommitLog
NM.Body = OM.Body
SendBack
DelayLV = ReconsumeTimes + 3
Backup
clearPropertyPROPERTY_DELAY_TIME_LEVEL
Prepare
Subscrbe TOPIC: %RETRY%ConsumerGroup
Fetch Original Message (OM)By Original CommitLog Offset
Report Consume Offsett