2013-01-23 3 views
2

X 시간마다 코드를 실행 (데이터를 가져 와서 Azure SQL에 저장)하는 작업자 역할이 있습니다. 타이밍은 Run 메서드의 while (true) 루프에서 Thread.Sleep을 사용하여 구현됩니다.웹 역할에서 Azure Worker 역할 다시 시작

웹 역할 내에서 수동으로 작업 할 수있는 능력을 갖고 싶습니다. 작업자 역할에서 코드를 시작합니다 (필자의 경우 수동 데이터와 저장 데이터). Azure Management API를 사용하여 전체 작업자 역할을 다시 시작할 수 있지만 과도한 것처럼 보이며 특히 인증서 주위에 필요한 모든 작업을주의 깊게 보았습니다.

웹 역할에서 작업자 역할을 다시 시작하거나 웹 역할의 요청에 따라 작업자 역할의 코드를 실행하는 더 좋은 방법이 있습니까?

+1

, 푸른 물방울에 방울을 게시, 푸른 큐에 이벤트를 게시 푸른 테이블에 레코드를 변경하거나 SQL 애저의 일부 변경을 같은 아무것도 것이다 작업 - 웹 역할이 변경 작업을 수행하고 작업자 역할이 변경 사항을 기다립니다. – sharptooth

+0

@sharptooth 귀하의 의견을 답장으로 받아 들일 것입니다. 그것은 쉽고 충분하다고 생각합니다. –

답변

1

아무것도 :

마지막으로 로컬 패키지를 다운로드 한 다음이 유사한 코드를 실행하여 다른 클라우드 서비스에 작업자 역할을 배포 할 수 있습니다 웹 역할의 일부 코드가 (또는 제거) 것 Azure 테이블에 이벤트를 게시하거나, Azure Blob에 blob을 게시하거나, Azure 테이블에서 레코드를 변경하거나, SQL Azure에서 일부 변경을하는 등의 작업이 수행됩니다. 웹 역할이 변경 작업을 수행하고 작업자 역할이 변경을 기다립니다. 아마도 확실하지 않지만 Azure 대기열이 가장 깨끗한 방법 일 것입니다.

while(true) { 
    if(storage.BlobExists(blobName)) { 
     break; 
    } 
} 

것 - 그것은 나타날 때까지 쿼리 같은 덩어리를 - 당신이 그렇지 않으면이 코드를 쿼리 사이에 지연을 삽입해야 당신이주의해야

하나 개 매우 중요한 것은 폴링을 사용하기로 결정하는 경우이다 스토리지로 돌진하면 거래 비용이 부과됩니다. SQL Azure의 경우 비용이 전혀 들지 않지만 서비스 용량이 낭비 될 수 있으므로 SQL Azure에 대기중인 다른 작업이 느려집니다.

이 어떻게 수행해야된다 :

while(true) { 
    if(storage.BlobExists(blobName)) { 
     break; 
    } 
    // value should not be less that several hundred (milliseconds) 
    System.Threading.Thread.Sleep(15 * 1000); 
} 
1

음, Azure Fluent Management (서비스 관리 API를 내부적으로 사용함)를 사용하는 것이 좋습니다. "Deploying to Windows Azure"페이지를보십시오.

  • 클라우드 서비스 : mywebapp.cloudapp.net
    • 생산 슬롯
      • 역할 : MyMvcApplication
  • 싶은 것하면 다음과 같다 클라우드 서비스 : mybackgroundworker.cloudapp.net

    • 생산 슬롯
      • 없음 DEPLOYMENT

그래서 당신은 일반적으로 클라우드 서비스가 웹 역할로 실행했을 그게 다야. 다음으로해야 할 일은 Worker Role을 만들고, 코드를 추가하고, cspkg 파일에 패키지를 만들고, blob 저장소에 업로드하는 것입니다.

var subscriptionManager = new SubscriptionManager(TestConstants.SubscriptionId); 
var deploymentManager = subscriptionManager.GetDeploymentManager(); 

deploymentManager 
     .AddCertificateFromStore(Constants.Thumbprint) 
     .ForNewDeployment(TestConstants.HostedServiceName) 
     .SetCspkgEndpoint(@"C:\mypackage") 
     .WithNewHostedService("myelastatestservice") 
     .WithStorageAccount("account") 
     .AddDescription("my new service") 
     .AddLocation(LocationConstants.NorthEurope) 
     .GoHostedServiceDeployment(); 
관련 문제