2014-04-23 1 views
2

Azure StorageJueue에서 항목을 제거한 다음 Azure 테이블에 저장하는 다음 스크립트와 같이 Azure WebJob을 만듭니다. 이 프로세스는 1 ~ 2 초 안에 완료되지만 1 분에 몇 번만 실행됩니다 (간혹 약 10 분 후에 중지됨). 전반적으로 잘 작동하지 않습니다.WebJob을 연속 작성하는 방법은?

무엇이 누락 되었습니까? 아마도 방아쇠 작업과 연속 작업을 혼합하고 있지만 적절한 샘플을 찾기가 어렵습니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("started at {0}", DateTime.Now.ToString("s")); 

     // Continuous job should have infinite loop. 
     while(true){ 
      var host = new JobHost(); 
      host.RunAndBlock(); 
     } 
    } 

    public static void ProcessQueueMessage([QueueInput("blogqueue")] string json) 
    { 
     var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings ["StorageConnectionString"].ConnectionString); 
     var tableClient = storageAccount.CreateCloudTableClient(); 

     // Store it to Azure Table Storage 
     // omitted... 

     Console.WriteLine("Received JSON: {0}", json); 
    } 

답변

5

몇 가지 코멘트 :

  1. 당신은 while(true) 문을 필요가 없습니다. RunAndBlock에는 이미 while 루프가 있고 거기에서 차단됩니다.
  2. 필요 없음 수동으로 테이블을 검색 할 필요가 없습니다. 샘플에 표시된대로 표에 바인딩 할 수 있습니다. here
  3. 저장소 계정에 바인딩 할 수 있으므로 구성 파일에서 수동으로 연결 문자열을 읽고 인스턴스를 만들 필요가 없습니다. 여기

스토리지 계정에 바인딩의 예입니다

public static void ProcessQueueMessage([QueueInput("blogqueue")] string json, CloudStorageAccount) 
{ 
    ... 
} 

이것은 추측이지만, 당신의 코드에서, 저장 연결 문자열이 설정 파일에 StorageConnectionString에 저장되어있는 것으로 보인다. JobHost은 (1) 런타임에 대한 연결 문자열과 데이터가 AzureJobsDataAzureJobsRuntime (here과 같이)에 저장되거나 (2) 연결 문자열을 매개 변수로 JobHost 생성자에 전달해야합니다. 이것이 사고의 이유라고 생각합니다.

+0

감사합니다, 나는 (ProcessQueueMessage)는 트리거 모드에서 바인더 제본 방법을 실행할 수 않는 질문이? 내 말은, "대기열 항목이 도착하면 연속적으로 트리거 됨"또는 "지속적으로 Azure 자신의 WebJob 스케줄러 기간으로 새 항목을 확인"을 의미합니까? 내 Azure 저장소 탐색기는 프로세스가 성공 했음에도 큐에서 대기열에서 제외 된 수가 증가하거나 증가했지만 대기열에서 제거되지 않았 음을 보여줍니다. Main method와 binded method는 명확한 관계가 없으므로 그 과정을 추측하기는 어렵습니다. – Youngjae

+1

"RunAndBlock"시나리오에서 위의 작업을 사용하면 작업이 연속적이어야합니다. 즉, 프로세스가 항상 실행되며 주기적으로 (수 초마다) 지정된 Azure 큐를 폴링합니다. –

+0

WebJob이 실행 빈도가 낮기 때문에 (약 1 ~ 2 초 정도?) WebJob을 WorkerRole로 변경했습니다. 나는 그것이 높은 (0 ~ 10ms 정도) 주파수를 가질 것으로 예상했다. WebJob은 0 ~ 10ms의 실행 빈도를 실행할 수 있습니까? – Youngjae

2

WebJob이 제대로 작동하려면 웹 사이트의 구성 탭에서 "항상 켜기"를 활성화해야합니다.

"항상 켜기"기능은 기본/표준 웹 사이트 계획에 대해서만 제공되며 활성화되지 않은 경우 WebJob이 잠시 후에 중지 될 수 있습니다.

+0

나는 이미 그것을 만들었다. – Youngjae

2

그냥가에 제작 설정을 변경 프로젝트 이름/속성/webjob 게시-settings.json

"runMode": "OnDemand" => "runMode": "Continuous" 
관련 문제