Azure WebJobs QueueTrigger не запускается

Я пытаюсь выяснить, что я делаю неправильно в отношении метода Azure WebJobs QueueTrigger, который должен запускаться из очереди хранилища Azure.

Я прочитал пару документов (например, сообщения в блогах / статьи msdn). Но мне все еще непонятно.

Главный вопрос / непонятый аспект:

Каким должно быть имя строки подключения для приложения консоли хранилища Azure App.config или конфигурации Windows Azure (портал). Пока что в обоих местах установлены следующие имена.

  • AzureJobsХранилище
  • AzureWebJobsStorage
  • AzureВакансии
  • AzureJobsDashboard
  • AzureJobsData

Вот код моего консольного приложения WebJobs.

static void Main()
{
    JobHost host = new JobHost();
    host.RunAndBlock();
}

public static void CreateLeague([QueueTrigger("temp")] string msg)
{
    var task = JsonConvert.DeserializeObject<QueueTask>(msg);

    if (task.TaskType == QueueTask.TaskTypes.Pdf)
      RenderPdf(task.Id);
}

Это консольное приложение постоянно работает на моем веб-сайте Azure.

Я могу получить доступ к его странице «отладки», где я могу переключить вывод, и я вижу, что он запущен / работает.

Мой код для добавления очереди (из моего приложения ASP.NET MVC):

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("temp");
queue.CreateIfNotExists();
Common.QueueTask task = new Common.QueueTask();
task.TaskType = Common.QueueTask.TaskTypes.Pdf;
task.Id = p.Id;
CloudQueueMessage msg = new CloudQueueMessage(JsonConvert.SerializeObject(task)      );
queue.AddMessage(msg);

Этот код выполняется, и очередь добавляется в мою учетную запись хранения. Но они не получали "удаление из очереди" или чтение из веб-заданий.


person Dominic St-Pierre    schedule 16.10.2014    source источник


Ответы (3)


Хм, класс WebJobs должен был быть публичным.

using Microsoft.Azure.WebJobs;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Newtonsoft.Json;
using Proceed.Common;
using System;
using System.Configuration;
using System.IO;

public class WebJobsTask {
  public static void Main()
  {
      JobHost host = new JobHost();
      host.RunAndBlock();
  }

  public static void CreateLeague([QueueTrigger("temp")] string msg)
  {
    var task = JsonConvert.DeserializeObject<QueueTask>(msg);

    if (task.TaskType == QueueTask.TaskTypes.Pdf)
      RenderPdf(task.Id);
  }
}

Также нашел быстрый способ изучить мои очереди: https://azurestorageexplorer.codeplex.com/.

person Dominic St-Pierre    schedule 16.10.2014
comment
Так рада, что вы опубликовали этот ответ. Не могу поверить, что шаблоны кода в студии по умолчанию закрывают класс. - person JasonCoder; 24.03.2016

В моем случае я предположил, что QueueTrigger имел в виду очереди служебной шины, а не очереди Azure, и мне действительно нужно было использовать ServiceBusTrigger.

person Loren Paulsen    schedule 05.06.2015
comment
У меня была такая же проблема. Также видел ServiceBusTrigger, упомянутый местами, но атрибут никогда не разрешается, пока я не добавлю пакет Nuget Microsoft.Azure.WebJobs.ServiceBus! Поговорим о непонятности в документации. - person Dmitri M; 20.06.2015
comment
Действительно, сбивает с толку. - person ohavryl; 02.11.2015

  1. Вы можете использовать обозреватель серверов в VS для изучения содержимого очередей хранилища.
  2. Триггеры очереди для SDK WebJobs будут экспоненциально отключаться, если нет работы. Может быть задержка между моментом помещения сообщения в очередь и моментом его получения. Вы можете настроить максимальный откат с помощью свойства JobHostConfiguration.Queues.MaxPollingInterval.
  3. Для последней версии SDK вам понадобятся две строки подключения к хранилищу AzureWebJobsStorage и AzureWebJobsDashboard.

Это отличное место для дополнительных ресурсов: https://docs.microsoft.com/en-us/azure/app-service-web/websites-webjobs-resources

person Victor Hurdugaci    schedule 16.10.2014