在Web角色中使用Webjobs SDK

时间:2014-10-24 14:07:02

标签: azure azure-web-roles azureservicebus azure-webjobssdk

我们有一个Azure Web角色,需要监视服务总线队列以获取对早期请求的响应(然后通过SignalR将其传输到客户端)。

首先,我们想在WebRole.OnStart()中使用消息泵(QueueClient.OnMessage)。但是,我们已经发展到非常像WebJobs SDK,特别是它如何释放一些低级实现的程序员和仪表板。

由于各种原因,我们希望保留Web角色而不是切换到WebSite。因此出现了一个问题:如何在Azure Web角色中使用WebJobs SDK?在一个小实验中,我们在WebRole.cs中调整了Web角色的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);
    }
}

这似乎工作正常,但我们很难评估它对Web角色的影响。会有后果吗?也许在扩展Web角色?

感谢。

1 个答案:

答案 0 :(得分:3)

WebJobs 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);
   }

}