У нас есть сообщение, которое может работать до 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
Azure Service Bus: долгое время продлительное сообщение не обновляется ⇐ C#
Место общения программистов C#
1738837224
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 не гарантирует обновление при всех условиях. Но как мы должны справиться с этим?
Подробнее здесь: [url]https://stackoverflow.com/questions/79415832/azure-service-bus-long-running-message-not-renewing[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия