mirror of
https://github.com/HDT3213/delayqueue.git
synced 2025-10-05 23:26:49 +08:00
support NackRedeliveryDelay
This commit is contained in:
@@ -43,7 +43,8 @@ type DelayQueue struct {
|
||||
// for batch consume
|
||||
consumeBuffer chan string
|
||||
|
||||
eventListener EventListener
|
||||
eventListener EventListener
|
||||
nackRedeliveryDelay time.Duration
|
||||
}
|
||||
|
||||
// NilErr represents redis nil
|
||||
@@ -205,6 +206,13 @@ func (q *DelayQueue) WithDefaultRetryCount(count uint) *DelayQueue {
|
||||
return q
|
||||
}
|
||||
|
||||
// WithNackRedeliveryDelay customizes the interval between redelivery and nack (callback returns false)
|
||||
// If consumption exceeded deadline, the message will be redelivered immediately
|
||||
func (q *DelayQueue) WithNackRedeliveryDelay(d time.Duration) *DelayQueue {
|
||||
q.nackRedeliveryDelay = d
|
||||
return q
|
||||
}
|
||||
|
||||
func (q *DelayQueue) genMsgKey(idStr string) string {
|
||||
if q.useHashTag {
|
||||
return "{dp:" + q.name + "}" + ":msg:" + idStr
|
||||
@@ -427,7 +435,7 @@ func (q *DelayQueue) nack(idStr string) error {
|
||||
atomic.AddInt32(&q.fetchCount, -1)
|
||||
// update retry time as now, unack2Retry will move it to retry immediately
|
||||
err := q.redisCli.ZAdd(q.unAckKey, map[string]float64{
|
||||
idStr: float64(time.Now().Unix()),
|
||||
idStr: float64(time.Now().Add(q.nackRedeliveryDelay).Unix()),
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("negative ack failed: %v", err)
|
||||
|
Reference in New Issue
Block a user