我们有一个 Azure Web 角色,需要监视服务总线队列以响应早期请求(然后通过 SignalR 传输到客户端)。
首先我们想在WebRole.OnStart()中使用消息泵(QueueClient.OnMessage)。然而,我们已经变得非常喜欢 WebJobs SDK,特别是它如何将程序员从一些较低级别的实现和仪表板中解放出来。
出于各种原因,我们希望保留 Web 角色而不是切换到网站。那么问题来了:如何在Azure Web Role中使用WebJobs SDK?在一个小实验中,我们在 WebRole.cs 中调整了 Web Role 的 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 角色?
谢谢。
最佳答案
WebJobs SDK 在 WebRole 中应该可以正常工作。
我对您的实现有一个建议:不要阻止 OnStart
方法。使用 Start
/StartAsync
,而不是调用 RunAndBlock
。这不会阻止该方法,并将为作业主机创建一个单独的线程。
可能看起来像(不确定是否可以编译):
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);
}
}
关于azure - 在 Web 角色中使用 Webjobs SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26549568/