Можно ли обновить/удалить свойство приложения из ServiceBusReceivedMessage?C#

Место общения программистов C#
Ответить
Anonymous
 Можно ли обновить/удалить свойство приложения из ServiceBusReceivedMessage?

Сообщение Anonymous »

У меня есть метод ServiceBusTrigger, который обрабатывает транзакции продаж. Если транзакция не найдена в базе данных и возвращается ошибка 404, я копирую сообщение служебной шины и добавляю/увеличиваю retryCounter в свойствах приложения. Когда достигается максимальное количество повторов, я записываю его в мертвую букву.
Моя проблема в том, что мне нужен способ либо удалить 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»