Это так.Чтобы сделать это, нужно передать какое-то состояние в дополнительном заголовке отложенного сообщения:
var headers = new Dictionary<string, string>();
await _bus.Advanced.TransportMessage.Defer(TimeSpan.FromSeconds(30), headers);
, например, путем подсчета попыток доставки:
var attempt = failedMessage.Headers.TryGetValue("delivery-attempt", out var x)
? x
: 0;
var delay = FigureOutDelay(attempt);
var headers = new Dictionary<string, string> {
{"delivery-attempt", (attempt+1).ToString()}
};
await _bus.Advanced.TransportMessage.Defer(delay, headers);
плюс немного большенапример, переслать в очередь недоставленных сообщений, если она продолжает отказывать слишком долго.