У меня есть рабочая роль, которая потребляет сообщения из очереди Azure, выполняет некоторую обработку в фоновом режиме. Когда я просматриваю журнал, кажется, нет быть не исключение регистрируется при обработке сообщения, но все еще в моих журналах я получаю следующее исключение (наклеивая некоторые из соответствующих текстов только из длинного протокола ошибок):Указанное сообщение не существует. ErrorCode: MessageNotFound Prod-WorkerError Context
System.Net.WebException Microsoft.WindowsAzure.Storage.StorageException Exception messages: The remote server returned an error: (404) Not Found. The remote server returned an error: (404) Not Found. Stack Traces: at System.Net.HttpWebRequest.GetResponse() at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand
1 cmd, IRetryPolicy policy, OperationContext operationContext) --- Next Call Stack: at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand
1 cmd, IRetryPolicy policy, OperationContext operationContext) at Microsoft.WindowsAzure.Storage.Queue.CloudQueue.DeleteMessage(String messageId, String popReceipt, QueueRequestOptions options, OperationContext operationContext) at InnovativeExams.Azure.CloudStorage.AzureQueue`1.DeleteMessage(T message) The specified message does not exist. ErrorCode:MessageNotFound Prod-WorkerError Context
Здесь это код, который у меня есть в рабочей роли:
private void ProcessQueueMessage(object queueMessageToProcess)
{
var queueMessage = queueMessageToProcess as EventCompletedQueueMessage;
try
{
if (_eventCompletedProcessor.Process(queueMessage))
_azureQueue.DeleteMessage(queueMessage);
}
catch (Exception ex)
{
_logger.LogError(string.Format("Event Completed message <{0}> was not processed due to an exception", queueMessage.Id), ex, LogSources.WorkerRole_EventCompletedDispatcher);
}
}
Вышеупомянутое исключение попадает в вышеупомянутый блок catch и регистрируется.
Я думаю, что есть некоторая проблема, когда рабочая роль пытается удалить сообщение в очереди и сообщение не найдено.
Нужна помощь от кого-то, чтобы помочь мне разрешить эту ошибку и узнать фон, что здесь не так.
Несколько вопросов задают в комментариях:
1) Вы используете несколько экземпляров вашего рабочего роли?
A: Это уже существующее приложение, и я выяснил, что мы используем ThreadPool для предварительной реализации, потоки, которые готовы к работе.
2) Как вы получаете сообщения в своей рабочей роли? Используете ли вы какую-то модель выбора лидеров, чтобы решить, какой экземпляр получает сообщения?
A: Да, существует инфраструктура, которая определяет соответствующий диспетчер для обработки QueueMessage.
3) Когда вы получаете сообщения, какой тайм-аут видимости для этих сообщений?
A: Его набор 120.
4) Сколько времени потребуется для вас, чтобы обработать эти сообщения, т.е. сколько времени между получением сообщения и удалять сообщения?
A: Я не уверен в этом.
Несколько вопросов (Пожалуйста, обновите свой вопрос с ответами на эти вопросы): 1) Вы используете несколько экземпляров вашей рабочей роли? 2) Как вы «получаете» сообщения в своей рабочей роли? Используете ли вы какую-то модель выбора лидеров, чтобы решить, какой экземпляр получает сообщения? 3) Когда вы получаете сообщения, какой тайм-аут видимости для этих сообщений? 4) Сколько времени вам нужно для обработки этих сообщений, т. Е. Сколько времени между получением сообщения и удалением сообщений? –
@ GauravMantri Отредактировал вопрос. Пожалуйста, проверьте. – Maninder