Azure Service Bus: долгое время продлительное сообщение не обновляетсяC#

Место общения программистов C#
Ответить
Anonymous
 Azure Service Bus: долгое время продлительное сообщение не обновляется

Сообщение Anonymous »

У нас есть сообщение, которое может работать до 1 часа. Это должно быть обработано только один раз. Мы получаем проблемы, когда сообщение становится доступным для других процессоров, однако, когда мы пытаемся завершить сообщение. p>
Мы настраиваем службу шины следующим образом: < /p>
var options = new ServiceBusProcessorOptions
{
AutoCompleteMessages = false,

MaxConcurrentCalls = 1,
PrefetchCount = 0,
ReceiveMode = ServiceBusReceiveMode.PeekLock,
MaxAutoLockRenewalDuration = TimeSpan.FromHours(2),

};
< /code>
Затем мы обрабатываем сообщение следующим образом: < /p>
private async Task HandleMessageAsync(ProcessMessageEventArgs processMessageEventArgs)
{
try
{
var rawMessageBody = Encoding.UTF8.GetString(processMessageEventArgs.Message.Body);
_logger.LogInformation("Received message {MessageId} with body {MessageBody}",
processMessageEventArgs.Message.MessageId, rawMessageBody);

var repoRequest = JsonConvert.DeserializeObject(rawMessageBody);
if (repoRequest != null)
{
await ProcessMessage(repoRequest, processMessageEventArgs.Message.MessageId,
processMessageEventArgs.Message.ApplicationProperties,
processMessageEventArgs.CancellationToken);
}
else
{
_logger.LogError(
"Unable to deserialize to message contract {ContractName} for message {MessageBody}",
typeof(TMessage), rawMessageBody);
}

_logger.LogInformation("Message {MessageId} processed", processMessageEventArgs.Message.MessageId);

await processMessageEventArgs.CompleteMessageAsync(processMessageEventArgs.Message);
}
catch (Exception ex)
{
await processMessageEventArgs.AbandonMessageAsync(processMessageEventArgs.Message);
_logger.LogError(ex, "Unable to handle message");
}
}
< /code>
Однако мы получаем постоянные исключения ServiceBusReceiver.RENEWMESSAGELOCK на этом пути, что в порядке, поскольку сообщение продолжает обрабатывать. Однако в конце сообщения, когда мы вручную вызовут await processmessageeventargs.completemessageasync (processmessageeventargs.message); < /code> он не работает с < /p>

.Servicebus.servicebusexception: предоставленная блокировка
недействительна. Либо срок действия блокировки истек, либо сообщение уже было удалено из очереди. Для получения дополнительной информации, пожалуйста, см. Ссылка: xxxxxxx,
trackingid: xxxxx,
systemtracker:gi::g9:4521499:amqps://xxxxxx.servicebus.windows.net/-eb5b7cf4; 25:30:31:source: Daaddress: • /xxxxxx, фильтр: []),
bi :: in-connection1648 (g9-96965) :: session1654 :: link417153,
TimeStamp: 2025-02-05T11: 37: 31 (Messagelocklost). Для устранения неполадок
информация см. at
zazure.messaging.servicebus.amqp.amqpreceiver.disposemessageasync(guid
locktoken, результат результата, расположение диспозиции, временное время
, Иддеар2 propertiesToModify, String deadLetterReason, String deadLetterDescription) at Azure.Messaging.ServiceBus.Amqp.AmqpReceiver.CompleteInternalAsync(Guid lockToken, TimeSpan timeout) at Azure.Messaging.ServiceBus.Amqp.AmqpReceiver.c.d.MoveNext() --- End of stack trace from previous location --- at Azure.Messaging.ServiceBus.ServiceBusRetryPolicy.c__22< /code> 1. d.movenext ()
--- Конец трассировки стека из предыдущего место4 operation, T1 t1, TransportConnectionScope scope, CancellationToken cancellationToken, Boolean logTimeoutRetriesAsVerbose) at Azure.Messaging.ServiceBus.ServiceBusRetryPolicy.RunOperation[T1,TResult](Func< /code> 4
Operation, T1 T1, TransportConnectionscope Scope, CancellationToken
CancellationTokene, Boolean LogtimeOutreetRiesAsverBose) на
Операция, T1 T1, TransportConnectionscope Scope, CancellationToken
CancellationToken) at
.Messaging.servicebus.serviceBusReceiver.completemessageAsync (ServiceBusReceivedMessage
Сообщение, отмену отмены Я знаю, что, несмотря на то, что Maxautolockrenewalduration установлена ​​на 2 часа, Azure не гарантирует обновление при всех условиях. Но как мы должны справиться с этим?

Подробнее здесь: https://stackoverflow.com/questions/794 ... t-renewing
Ответить

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

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

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

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

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