func NewRenewLockHandler()

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)
	}
}