in v2/lockrenewer.go [38:73]
func NewRenewLockHandler(options *LockRenewalOptions, handler Handler) HandlerFunc {
interval := 10 * time.Second
lockRenewalTimeout := 5 * time.Second
cancelMessageContextOnStop := true
metricRecorder := processor.Metric
if options != nil {
if options.Interval != nil {
interval = *options.Interval
}
if options.LockRenewalTimeout != nil && *options.LockRenewalTimeout != 0 {
lockRenewalTimeout = *options.LockRenewalTimeout
}
if options.CancelMessageContextOnStop != nil {
cancelMessageContextOnStop = *options.CancelMessageContextOnStop
}
if options.MetricRecorder != nil {
metricRecorder = options.MetricRecorder
}
}
return func(ctx context.Context, settler MessageSettler, message *azservicebus.ReceivedMessage) {
plr := &peekLockRenewer{
next: handler,
lockRenewer: settler,
renewalInterval: &interval,
renewalTimeout: &lockRenewalTimeout,
metrics: metricRecorder,
cancelMessageCtxOnStop: cancelMessageContextOnStop,
stopped: make(chan struct{}, 1), // buffered channel to ensure we are not blocking
}
renewalCtx, cancel := context.WithCancel(ctx)
plr.cancelMessageCtx = cancel
go plr.startPeriodicRenewal(renewalCtx, message)
handler.Handle(renewalCtx, settler, message)
plr.stop(renewalCtx)
}
}