in v2/managedsettling.go [148:175]
func handleError(ctx context.Context,
options *ManagedSettlingOptions,
settler MessageSettler,
message *azservicebus.ReceivedMessage,
handleErr error) {
if handleErr == nil {
handleErr = fmt.Errorf("nil error: %w", handleErr)
}
logger := getLogger(ctx)
if !options.RetryDecision.CanRetry(handleErr, message) {
logger.Error(fmt.Sprintf("moving message to dead letter queue because processing failed to an error: %s", handleErr))
deadLetterSettlement.settle(ctx, settler, message, &azservicebus.DeadLetterOptions{
Reason: to.Ptr("ManagedSettlingHandlerDeadLettering"),
ErrorDescription: to.Ptr(handleErr.Error()),
PropertiesToModify: nil,
})
// this could be a special hook to have more control on deadlettering, but keeping it simple for now
options.OnDeadLettered(ctx, message, handleErr)
return
}
// the delay is implemented as an in-memory sleep before calling abandon.
// this will continue renewing the lock on the message while we wait for this delay to pass.
delay := options.RetryDelayStrategy.GetDelay(message.DeliveryCount)
logger.Error(fmt.Sprintf("delay strategy return delay of %s", delay))
time.Sleep(delay)
abandonSettlement.settle(ctx, settler, message, nil)
options.OnAbandoned(ctx, message, handleErr)
}