Как показано в моем вопросе о переполнении стека Веб-задание Azure не соответствует свойству MaxDequeueCount, я устраняю проблему, когда, несмотря на то, что я установил для свойства MaxDequeueCount значение 1, некоторые элементы удаляются из очереди много раз, прежде чем они будут отравлены (на самом деле некоторые элементы могут никогда не быть отравленным и просто исключать из очереди, терпеть неудачу, повторять попытки и терпеть неудачу бесконечно).
SDK Webjobs автоматически обрабатывает повторные попытки и отравление сообщений, инициированных очередью, и я ищу журналы, которые содержат подробную информацию об этой обработке.
Например, я могу видеть, что моя функция обнаружила новый элемент очереди, просмотрев журнал веб-задания через SCM в https://myappengine.scm.azurewebsites.net/vfs/data/jobs/continuous/StuffProcessor/job_log.txt
(Кстати, если я включил подробное ведение журнала в хранилище Azure в веб-приложении, могу ли я получить эту же информацию в Blob?).
[02/22/2017 01:47:22 > ec8d0f: INFO] Executing: 'StuffProcessor.ProcessQueueMessage' - Reason: 'New queue message detected on 'stuff-processor'.'
[02/22/2017 01:47:26 > ec8d0f: INFO] Executed: 'StuffProcessor.ProcessQueueMessage' (Succeeded)
[02/22/2017 01:47:26 > ec8d0f: INFO] Executing: 'StuffProcessor.ProcessQueueMessage' - Reason: 'New queue message detected on 'stuff-processor'.'
Я также могу получить некоторую информацию о количестве исключений элемента из очереди, просмотрев журналы в контейнере azure-jobs-host-archive
, как только я включу подробное ведение журнала в хранилище Azure в веб-приложении:
{
"Type": "FunctionCompleted",
"EndTime": "2017-02-22T00:07:40.8133081+00:00",
"Failure": {
"ExceptionType": "Microsoft.Azure.WebJobs.Host.FunctionInvocationException",
"ExceptionDetails": "Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: ItemProcessor.ProcessQueueMessage ---> MyApp.Exceptions.MySpecialAppExceptionType: Exception of type 'MyApp.Exceptions.MySpecialAppExceptionType' was thrown.
},
"ParameterLogs": {},
"FunctionInstanceId": "1ffac7b0-1290-4343-8ee1-2af0d39ae2c9",
"Function": {
"Id": "MyApp.Processors.ItemProcessor.ProcessQueueMessage",
"FullName": "MyApp.Processors.ItemProcessor.ProcessQueueMessage",
"ShortName": "ItemProcessor.ProcessQueueMessage",
"Parameters": [
{
"Type": "QueueTrigger",
"AccountName": "MyStorageAccount",
"QueueName": "stuff-processor",
"Name": "sourceFeedItemQueueItem"
},
{
"Type": "BindingData",
"Name": "dequeueCount"
},
{
"Type": "ParameterDescriptor",
"Name": "logger"
}
]
},
"Arguments": {
"sourceFeedItemQueueItem": "{\"SourceFeedUpdateID\":437530,\"PodcastFeedID\":\"2d48D2sf2\"}",
"dequeueCount": "96",
"logger": null
},
"Reason": "AutomaticTrigger",
"ReasonDetails": "New queue message detected on 'stuff-processor'.",
"StartTime": "2017-02-22T00:07:40.6017341+00:00",
"OutputBlob": {
"ContainerName": "azure-webjobs-hosts",
"BlobName": "output-logs/1ffd3c7b012c043438ed12af0d39ae2c9.txt"
},
"ParameterLogBlob": {
"ContainerName": "azure-webjobs-hosts",
"BlobName": "output-logs/1cf2c1b012sa0d3438ee12daf0d39ae2c9.params.txt"
},
"LogLevel": "Info",
"HostInstanceId": "d1825bdb-d92a-4657-81a4-36253e01ea5e",
"HostDisplayName": "ItemProcessor",
"SharedQueueName": "azure-webjobs-host-490daea03c70316f8aa2509438afe8ef",
"InstanceQueueName": "azure-webjobs-host-d18252sdbd92a4657d1a436253e01ea5e",
"Heartbeat": {
"SharedContainerName": "azure-webjobs-hosts",
"SharedDirectoryName": "heartbeats/490baea03cfdfd0416f8aa25aqr438afe8ef",
"InstanceBlobName": "zd1825bdbdsdgga465781a436q53e01ea5e",
"ExpirationInSeconds": 45
},
"WebJobRunIdentifier": {
"WebSiteName": "myappengine",
"JobType": "Continuous",
"JobName": "ItemProcessor",
"RunId": ""
}
}
Что я не могу найти, так это журналы, в которых показаны подробности для конкретного элемента очереди, обработка которого не выполняется из-за исключения и помещается в очередь с ошибками. Я ищу их, чтобы в дальнейшем устранить явное игнорирование свойства MaxDequeueCount. Это зарегистрировано?
ОБНОВЛЕНИЕ: я нашел сообщение Веб-задания Azure с очередью хранилища и исключениями, и он содержал следующий снимок экрана:
На этом снимке экрана показаны стандартные сообщения «Обнаружено новое сообщение в очереди ...» (которые я вижу как в Azure, так и выполняющиеся локально в эмуляторе), а также показывает «Сообщение достигло MaxDequeueCount из X ... Перемещение сообщения в очередь 'xyz- яд '", который я только вижу локально в эмуляторе. Разве среда выполнения на основе Azure по какой-то причине не отображает эту информацию? Я никогда не вижу подобных сообщений, связанных с отравлением, при локальном запуске в окне консоли, через панель управления веб-заданиями или при работе в Azure.