2014-10-24 3 views
3

우리는 이전 요청에 대한 응답을 위해 서비스 버스 대기열을 모니터링해야하는 Azure 웹 역할이 있습니다.이 요청은 SignalR을 통해 클라이언트로 전송됩니다.웹 역할에서 Webjobs SDK 사용하기

처음에는 WebRole.OnStart()에서 메시지 펌프 (QueueClient.OnMessage)를 사용하려고했습니다. 그러나 우리는 WebJobs SDK와 매우 비슷해졌습니다. 특히 하위 레벨 구현의 프로그래머와 대시 보드를 자유롭게하는 방법이 있습니다.

여러 가지 이유로 우리는 WebSite로 전환하지 않고 웹 역할을 유지하려고합니다. Azure Web Role에서 WebJobs SDK를 사용하는 방법에 대한 질문이 생깁니다. 약간의 실험에서 다음과 같이 우리는 WebRole.cs의 웹 역할의 ONSTART을() 적응 :

public class WebRole : RoleEntryPoint 
{ 
    public override bool OnStart() 
    { 
     JobHostConfiguration config = new JobHostConfiguration() 
     { 
      ServiceBusConnectionString = "...", 
      StorageConnectionString = "...", 
      DashboardConnectionString = "..." 
     }; 

     JobHost host = new JobHost(config); 
     host.RunAndBlock(); 

     return base.OnStart(); 
    } 

    public static void ProcessQueueMessage([ServiceBusTrigger("MyQueue")] string inputText) 
    { 
     Trace.WriteLine(inputText); 
    } 
} 

이 잘 작동하는 것 같다, 그러나 우리는 웹 역할에 그것이 미치는 영향을 평가하는 데 문제가있는 . 결과가있을 수 있습니까? 아마도 웹 역할을 확장하는 데 도움이 될까요?

감사합니다.

답변

3

WebJob SDK는 WebRole에서 잘 작동합니다.

구현에 대한 제안 사항이 있습니다. OnStart 메소드를 차단하지 마십시오. RunAndBlock으로 전화하는 대신 Start/StartAsync을 사용하십시오. 이렇게하면 해당 메소드가 차단되지 않고 작업 호스트에 대해 별도의 스레드가 만들어집니다.

(이것은 컴파일 있는지 확실하지 않습니다)처럼 보일 것입니다 수 :

public class WebRole : RoleEntryPoint 
{ 
    private JobHost host; 

    public override bool OnStart() 
    { 
     JobHostConfiguration config = new JobHostConfiguration() 
     { 
      ServiceBusConnectionString = "...", 
      StorageConnectionString = "...", 
      DashboardConnectionString = "..." 
     }; 

     host = new JobHost(config); 
     host.Start(); 

     return base.OnStart(); 
    } 

    // Not sure if this is the signature of OnStop 
    // or even if this method is called this way 
    public override bool OnStop() 
    { 
     host.Stop(); 
     return base.OnStop(); 
    } 

    public static void ProcessQueueMessage([ServiceBusTrigger("MyQueue")] string inputText) 
    { 
     Trace.WriteLine(inputText); 
    } 

}

+0

덕분에,이 큐를 모니터링하기 위해 잘 작동합니다. 그러나 WebRole.cs를 채택했기 때문에 대기열 메시지는 이제 웹 응용 프로그램 (SignalR이 클라이언트에 알릴 수있는 곳)과 다른 프로세스에서 수신됩니다. 우리는 첫 번째 프로세스가 두 번째 프로세스에 알리도록해야합니까? 방법? 또는 webjob을 Global.asax 또는 OWIN의 Startup.cs로 옮깁니 까? – Egotix

+0

웹 응용 프로그램에서 웹 작업을 이동할 수 있습니다. 그것은 문제가되어서는 안됩니다. 유일한 관심사는 기본적으로 IIS가 웹 사이트를 중단하고 (그리고 webjob) 요청이 없다는 것입니다. Webjob을 활성 상태로 유지하기 위해 항상 켜져 있어야합니다. –

+0

작업자 역할에서 SignalR을 자체 호스트하고 WebRole에서 호출 할 수 있습니다 –

관련 문제