2015-11-23 3 views
1

Я бег приложения лазури webjobs SDK консоли (непрерывное) с рекомендуемой установкой:Azure webjob - QueueTrigger останавливает запуск

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage, TextWriter logger) 

Лазурное очередь я бег против имеет ~ 6000 сообщений в этом, и я бегу веб-работу локально, в качестве консольного приложения.

Проблема, с которой я столкнулся, заключается в том, что обработка обрабатывается случайным образом после обработки от 0 до 30 сообщений. Консоль остается открытой, но больше консольных сообщений не отображается.

Например, это может быть просто обработать 2 сообщения:

Executing: 'Functions.ProcessQueueMessage' - Reason: 'New queue message detected on 'QueueName'.' 
Executed: 'Functions.ProcessQueueMessage' (Succeeded) 
Executing: 'Functions.ProcessQueueMessage' - Reason: 'New queue message detected on 'QueueName'.' 
Executed: 'Functions.ProcessQueueMessage' (Succeeded) 

И потом, ничего. Кажется, что нет ничего плохого в моем подключении к Интернету, и я не могу отследить проблемы до каких-либо конкретных сообщений.

У кого-нибудь еще были проблемы с этим SDK?

Update:

Я убедился, что я использовал правильные версии всех зависимостей путем удаления пакетов NuGet, а затем повторно запустите установку-пакет Microsoft.Axure.Webjobs. Теперь я использую webjobs версии 1.1.0, которая вытащила в версии 4.3 лазурного хранилища.

Как рекомендовано Мэтью, я потянул исходный код для лазурных webjobs, чтобы определить, где процесс замерзает. После того, как происходит Freez вверх, приостановить исполнение и проверил работу темы, для того, что я считаю, является виновником в Microsoft.Azure.WebJobs.Host.CompositeTraceWriter

protected virtual void InvokeTextWriter(TraceEvent traceEvent) 
    { 
     if (_innerTextWriter != null) 
     { 
      string message = traceEvent.Message; 
      if (!string.IsNullOrEmpty(message) && 
       message.EndsWith("\r\n", StringComparison.OrdinalIgnoreCase)) 
      { 
       // remove any terminating return+line feed, since we're 
       // calling WriteLine below 
       message = message.Substring(0, message.Length - 2); 
      } 

      _innerTextWriter.WriteLine(message); 
      if (traceEvent.Exception != null) 
      { 
       _innerTextWriter.WriteLine(traceEvent.Exception.ToDetails()); 
      } 
     } 
    } 

Линия она замерзает на это строка 66: _innerTextWriter.WriteLine(message);

_innerTextWriter является экземпляром System.IO.TextWriter.SyncTextWriter

Возможно ли, что в этом классе есть проблема с тупиком или способ его использования?

Некоторые примечания:

  • Я бегу в отладчике, так что в этом случае я считаю, что TextWriter пересылает на консоль внутри
  • Я мой BATCHSIZE установлен в 1 через config.Queues.BatchSize = 1;, не уверен, что может иметь значение

В настоящее время я работаю над настройкой среды на другом компьютере, чтобы я мог видеть, воспроизводится ли она где-то, кроме этой машины (книга с надписью).

Update

Этот вопрос меня не понимание того, как новые окна 10 консольных команд работы. Каждый раз, когда вы нажимаете на окно команд, он переходит в режим выбора, который полностью приостанавливает выполнение процесса.

В основном: https://superuser.com/questions/419717/windows-command-prompt-freezing-randomly?newreg=ece53f5584254346be68f85d1fd2f18d

Вы можете сказать, что в этом состоянии, потому что это будет префикс заголовка окна с надписью «Выбрать»:

frozen command window

Вы должны нажать войти или нажмите снова, чтобы это произошло еще раз.

Итак, два заключительные комментарии:

1) То, что невероятно запутанного и не-интуитивное поведение для окна командной строки!

2) Я надеюсь, что какой-нибудь админ придет, пожалей, позор, который я навлек на себя и свою семью, удалив этот вопрос.

Чтобы избавиться от этого странного поведения, вы можете отключить режим QuickEdit:

disable QuickEdit Mode

ответ

1

Странно. Когда он находится в этом застрявшем состоянии, попробуйте добавить новое очередное сообщение в очередь и посмотреть, не срабатывают ли эти триггеры? Вы уверены, что ваша функция не висит внутри? Какую версию SDK вы используете? Вы также можете попробовать перейти на v1.1.0, который мы только что выпустили на прошлой неделе. Если на очереди есть очередь сообщений в ожидании обработки, я не могу думать ни о чем, что могло бы вызвать это. Слушатель очереди в SDK должен перекликаться, одновременно просматривая партии сообщений и отправляя их в вашу функцию. Вы изменили какую-либо из команд конфигурации JobHostConfiguration.Queues? У вас нет силы, чтобы обновить версию Azure SDK у вас есть что-то большее, чем поддерживает SDK WebJobs?

Другой вариант, если вы не можете понять это, может заключаться в клонировании SDK, его создании и отладке локально. repo is here. Цикл обработки основной очереди is here.

+0

Спасибо за идеи Мэтью - я буду исследовать дальше и ответить завтра. Ваши заметки о версиях SDK версии SDK и webjobs SDK звучат многообещающе, так как я боролся с некоторыми ссылками на пакет nuget, когда я вытащил код. Я попытался с пакетом webjobs версии 1.0.1, а затем 1.1.0 с аналогичными результатами, но не рассматривал другие зависимости. –

+0

v1.1.0 требует версию 4.3 SDK Azure Storage. Я знаю, что другие, которые пытались заставить его использовать более позднюю версию, столкнулись с проблемами. Рекомендуем убедиться, что вы используете правильную версию. – mathewc

+0

Ложная тревога по моему предыдущему комментарию :(Я думаю, что я неправильно истолковал счастливую полосу, так как проблема была решена. –

 Смежные вопросы

  • Нет связанных вопросов^_^