Azure Service Bus поддерживает встроенный механизм повтора, который заставляет забытое сообщение сразу же отображаться для другой попытки чтения. Я пытаюсь использовать этот механизм для обработки некоторых временных ошибок, но сообщение становится доступным сразу же после его отказа.
Я бы хотел сделать сообщение невидимым в течение некоторого периода времени после его отказа, предпочтительно на основе экспоненциально увеличивающейся политики.
Я пытаюсь установить свойство ScheduledEnqueueTimeUtc
при отказе от сообщения, но оно не похоже на эффект:
var messagingFactory = MessagingFactory.CreateFromConnectionString(...);
var receiver = messagingFactory.CreateMessageReceiver("test-queue");
receiver.OnMessageAsync(async brokeredMessage =>
{
await brokeredMessage.AbandonAsync(
new Dictionary<string, object>
{
{ "ScheduledEnqueueTimeUtc", DateTime.UtcNow.AddSeconds(30) }
});
}
});
Я вообще не думал о том, чтобы отказаться от сообщения и просто разрешить блокировку, но для этого потребуется какой-то способ повлиять на то, как MessageReceiver
указывает продолжительность блокировки сообщения, и я ничего не могу найти в API, чтобы я мог изменить это значение. Кроме того, было бы невозможно прочитать количество доставки сообщения (и, следовательно, принять решение о том, как долго ждать следующего повтора) до тех пор, пока уже не потребуется блокировка.
Можно ли каким-либо образом повлиять на политику повтора на шине сообщений или может быть искусственно введена задержка каким-то другим способом?