Моя проблема в том, что мне нужен способ либо удалить retryCounter из сообщения serviceBusReceived, либо иметь возможность установить его обратно на ноль, чтобы сообщения можно было отправить повторно.
Вот логика, которую я сейчас использую в catch.
` catch (Exception ex) когда (ex.Message.Contains("Не найден"))
{
int retries = 0;
Код: Выделить всё
var parsedMessage = _messageReceiver.ParseServiceBusMessage(message);
// create new sb message and retrieve retry count
var newMessage = new ServiceBusMessage(message);
newMessage.ApplicationProperties.TryGetValue("RetryCount", out object retry);
if (retry != null)
retries = Convert.ToInt32(retry);
// retry less than max count - increment count, submit new msg to service bus, complete previous sb message
if (retries < _config.MaxRetryCount)
{
var msgSuffix = DateTime.Now.ToString("yyyy-MM-dd H:mm:ss.FFFFFF");
newMessage.MessageId = $"{parsedMessage.Transaction} {msgSuffix}";
if (!newMessage.ApplicationProperties.ContainsKey("RetryCount"))
newMessage.ApplicationProperties.Add("RetryCount", (retries + 1).ToString());
else
{
newMessage.ApplicationProperties.Remove("RetryCount");
newMessage.ApplicationProperties.Add("RetryCount", (retries + 1).ToString());
}
newMessage.ScheduledEnqueueTime = DateTime.UtcNow.AddSeconds(_config.HoldServiceBusMsgMinutes);
await outputEvents.AddAsync(newMessage);
log.LogInformation("Transaction not found. Resubmitted to service bus {transaction}", parsedMessage.Transaction);
await _messageReceiver.CompleteMessageAsync(message, messageReceiver);
}
// max retries reached - deadletter the service bus message
else
{
log.LogError("Transaction number {transaction} has reached max number of 404 retries", parsedMessage.Transaction);
await _messageReceiver.DeadletterMessageAsync(message, messageReceiver, ex);
}
}
Я искал метод Remove() в ServiceBusReceived.ApplicationProperties или способ обновления свойств, но я считаю, что они доступны только для чтения. Есть ли другой способ отправить сообщение в мертвое письмо без счетчика или, по крайней мере, обновить его до нуля? Спасибо за любые предложения.
Подробнее здесь: https://stackoverflow.com/questions/790 ... vedmessage
Мобильная версия