2010-02-04 2 views
1

두 개의 작업자 역할 인스턴스가 있습니다.하나의 작업자 역할 인스턴스에서만 하위 작업을 실행하는 방법

작업자 역할 인스턴스 중 하나에서만 하위 작업 (스레드 풀 스레드에서)을 실행하려고합니다.

ThreadPool.QueueUserWorkItem((o) => 
{ 
    if (RoleEnvironment.CurrentRoleInstance.Id == RoleEnvironment.Roles[RoleEnvironment.CurrentRoleInstance.Role.Name].Instances.First().Id) 
    { 
     emailWorker.Start(); 
    } 
}); 

그러나, 위의 코드는 항상 같은 순서로 인스턴스를 반환 Role.Instances 수집에 의존 :

내 초기 아이디어는 이런 일을 할 수 있었다. 이 경우인가요? 또는 항목을 임의의 순서로 반환 할 수 있습니까?

하나의 역할 인스턴스에서만 작업을 실행할 수있는 또 다른 승인 된 방법이 있습니까?

감사합니다,

답변

1

조, 당신이 찾고있는 솔루션은 일반적으로 의존에 :

  • 중 하나의 Blob을 사용하여 특정 덩어리에 (그러나 만료와, 잠금과 유사) 임대에 인수 역할 인스턴스 간의 동기화 지점으로 저장소.
  • 또는 대기열 저장소에서 메시지를 대기열에 넣기/대기열에서 풀다는 것은 대개 이메일 전송과 같이 장기간 실행되는 작업을 지연시키는 데 권장되는 패턴입니다.

어느 쪽이든, Azure 저장소를 통과해야 작동합니다. Lokad.Cloud을 살펴볼 것을 제안합니다. 우리는 이러한 상황을 정확하게 처리하기 위해이 오픈 소스 프레임 워크를 설계했습니다.

0

다른 작업을 수행해야하는 경우 단일 작업자 역할의 인스턴스가 2 개없는 것처럼 들립니다. 실제로는 2 가지 다른 직무 역할을 수행합니다.

특히 응용 프로그램의 확장 성을 고려할 때 프로세스는 둘 이상의 인스턴스에서 실행될 수 있어야합니다. 하나의 역할로만 실행하려는 작업이 충분히 커져서 2 개 이상의 역할 인스턴스로 확장해야하는 경우 어떻게됩니까?

Azure를 개발할 때 얻을 수있는 장점 중 하나는 제대로 응용 프로그램을 설계하면 자동으로 확장 성을 얻게된다는 것입니다. 만약 당신이 할 일을 확장 할 수없는 무언가를 얻기 위해 여분의 노력합니다.

이 작업을 시작하기위한 트리거는 무엇입니까? 대기열 저장소에서 메시지를 사용하면 (Joannes가 제안한 것처럼) 한 명의 작업자 역할 만 메시지를 선택하여 처리하고 작업자 역할의 인스턴스에 상관없이 작업을 수행합니다.

하위 작업을 수행하는 작업자 역할과 그 밖의 모든 작업을 수행하는 다른 작업자 역할이있는 경우 Azure 솔루션에 2 개의 작업자 역할을 추가하기 만하면됩니다. 그러나 그렇게하더라도 하위 작업을 처리하는 작업자 역할은 올바르게 실행될 단일 인스턴스 이상을 실행하도록 확장하는 방식으로 작성되어야합니다. 이 경우 하위 작업을 시작하기 위해 Queue에서 메시지를 처리하기 위해 단일 작업자 역할과 코드를 사용하는 것이 좋습니다.

관련 문제