2014-10-16 18 views
5

Próbuję znaleźć, co robię źle w odniesieniu do metody kolejki sieci WebJobs Azure WebJobs, które powinny być uruchamiane z kolejki pamięci Azure.Wywołanie kolejki Azure WebJobs nie wyzwala

Przeczytałem kilka dokumentów (jak na blogach/artykułach msdn). Ale nadal nie jestem jasny.

Główne pytanie/niezrozumiany aspekt: ​​

Jaka powinna być nazwa ciąg połączenia do przechowywania aplikacji konsoli Azure app.config lub Konfiguracja Azure Windows (portal). Do tej pory w obu miejscach mam ustawioną nazwę.

  • AzureJobsStorage
  • AzureWebJobsStorage
  • AzureJobsRuntime
  • AzureJobsDashboard
  • AzureJobsData

Oto mój kod WebJobs aplikacja konsoli.

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); 
} 

Ta aplikacja konsolowa jest ciągle uruchomiona na mojej witrynie Azure.

Mogę uzyskać dostęp do strony "debugowanie", gdzie mogę przełączać dane wyjściowe i widzę, że jest uruchomione/uruchomione.

Mój kod, aby dodać kolejkę (z mojej aplikacji 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); 

Ten kod jest wykonywany, a kolejki są dodawane do mojego konta Storage. Ale nie dostali "odstrzelenia" ani nie przeczytali w WebJobs.

Odpowiedz

19

Hmm, klasa WebJobs musiała być publiczna.

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); 
    } 
} 

Również znalazłem szybki sposób na zbadanie moich kolejek: https://azurestorageexplorer.codeplex.com/.

+3

Cieszę się, że wysłałeś tę odpowiedź. Nie mogę uwierzyć, że szablony kodu w studio domyślnie klasy są prywatne. – JasonCoder

0
  1. Możesz użyć eksploratora serwerów w VS do eksplorowania zawartości kolejek pamięci.
  2. Trwa uruchamianie kolejki dla zestawu SDK WebJobs spowoduje wykładniczy powrót, jeśli nie ma żadnej pracy do wykonania. Może wystąpić opóźnienie między momentem umieszczenia wiadomości w kolejce a momentem jej odebrania. Możesz skonfigurować maksymalny back off poprzez właściwość JobHostConfiguration.Queues.MaxPollingInterval.
  3. Aby uzyskać najnowsze SDK potrzebne są dwa ciągi połączeń przechowywania AzureWebJobsStorage i AzureWebJobsDashboard

Jest to idealne miejsce dla większej ilości zasobów: https://docs.microsoft.com/en-us/azure/app-service-web/websites-webjobs-resources

13

W moim przypadku, przypuszczałem, że QueueTrigger odnosił się do Służby Kolejki autobusowe zamiast Kolejki Azure i faktycznie musiałem użyć ServiceBusTrigger.

+3

Miałem ten sam problem. Również zauważyłem ServiceBusTrigger wspomniane w miejscach, ale atrybut nigdy nie zostanie rozwiązany, dopóki nie dodałem pakietu Microsoft.Azure.WebJobs.ServiceBus nuget! Mów o braku jasności w dokumentacji. –

+0

Rzeczywiście, trochę mylące. – ohavryl