2017-02-13 2 views
3

클러스터의 모든 서버에서 실행되는 hangfire로 등록 된 되풀이 작업이 필요한 상황이 있습니다.모든 서버에서 hangfire 되풀이 작업

(작업이 필요 정기적으로 모든 서버에서 실행할 수 있도록 로컬 일부 파일을 복사하는 것입니다)

지금까지 내가 n 개의 서버에 대한 n 개의 작업의 결과로 서버 이름의 ID와 동일한 작업을 등록 시도했다 :

RecurringJob.AddOrUpdate(Environment.MachineName,() => CopyFiles(Environment.MachineName), Cron.MinuteInterval(_delay)); 

하고 작업 자체 검사가 올바른 서버이며,이 경우에만 무언가를하는 경우 :

public static void CopyFiles(string taskId) 
{ 
     if (string.IsNullOrWhiteSpace(taskId) || !taskId.Equals(Environment.MachineName)) 
     { 
      return; 
     } 

     // do stuff here if it matches our taskname 
} 

이 가진 문제는 모든 작업의 ​​execut 첫 번째 서버의 es가 완료되면 완료로 표시되고 결과적으로 다른 서버에서 실행되지 않습니다.

작업이 모든 서버에서 실행되는지 확인할 수있는 방법이 있습니까?

또는 하나의 서버 만 주어진 작업을 처리 할 수있는 방법이 있습니까? 즉, 작업을 생성 한 서버에서 작업을 수행하십시오.

+0

나는이 반대를 찾고 있었다, 그러나 당신이 나를 도왔다 질문 중 가능하다고 말했다. – Zapnologica

답변

3

this link을 사용하여 답변을 찾았습니다.

작업을 처리 할 서버에 특정한 큐에 할당하십시오.

그래서 나는 내 대기열을 변경 :

RecurringJob.AddOrUpdate(Environment.MachineName, 
() => CopyFiles(Environment.MachineName), 
    Cron.MinuteInterval(_delay), 
    queue: Environment.MachineName.ToLower(CultureInfo.CurrentCulture)); 

내가 내 서버를 시작할 때 나는이 작업을 수행 :

_backgroundJobServer = new BackgroundJobServer(new BackgroundJobServerOptions 
          { 
           Queues = new[] { Environment.MachineName.ToLower() } 
          }); 
+1

이 작업이 재 시도 될 때 "기본"대기열로 돌아갑니다. 여기에 표시된 것과 같이 속성을 사용하지 않는 한 : https://github.com/HangfireIO/Hangfire/pull/502 –

관련 문제