2014-10-16 7 views
5

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

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

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

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

  • AzureJobsStorage
  • AzureWebJobsStorage
  • AzureJobsRuntime
  • 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); 

Этот код выполняется, и очереди добавляются к моей учетной записи хранения. Но они не получили «dequeue» или не читали из WebJobs.

ответ

19

Хм, класс 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/.

+3

Так рад, что вы опубликовали этот ответ. Не могу поверить шаблонам кода в студии по умолчанию класс для частного. – JasonCoder

0
  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

13

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

+3

У меня была такая же проблема. Также видно, что ServiceBusTrigger упоминается в местах, но атрибут никогда не разрешается, пока я не добавил пакет Microsoft.Azure.WebJobs.ServiceBus nuget! Поговорите о том, что в документации не ясно. –

+0

Действительно, это путаница. – ohavryl

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

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