我们有一个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角色?
感谢。
答案 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);
}
}