我试图找出是否可以运行手动安排的webjob,并在消息到达Servicebus队列时启动它。
因此,webjob不会连续运行,而只会在消息到达时运行。 (从而节省资源成本)
到目前为止我尝试过的事情:
在Program.cs
public static async Task Main()
{
JobHostConfiguration config = new JobHostConfiguration();
_servicesBusConnectionString = AmbientConnectionStringProvider.Instance.GetConnectionString(ConnectionStringNames.ServiceBus);
ServiceBusConfiguration serviceBusConfig = new ServiceBusConfiguration();
config.UseServiceBus(serviceBusConfig);
JobHost host = new JobHost(config);
Console.WriteLine("Starting host");
host.RunAndBlock();
}
在Functions.cs
中public static void SBQueue2SBQueue([ServiceBusTrigger("createinvoice")] string start)
{
Console.WriteLine("Receiving a message");
}
然后用run.cmd启动该过程
@echo off
dotnet CoreConsoleWebJob.dll
但是,在此解决方案中,我从azure控制台启动了手动触发的webjob。 host.RunAndBlock();阻止了线程,但是过了一段时间,该过程失败了,因为它闲置了太长时间并且webjob被关闭了。
Azure Servicebus基础结构是否有可能调用该过程?还是连续的网络作业始终是必经之路。
谢谢!
答案 0 :(得分:2)
Webjob运行在应用程序服务计划上。而且,由于您已经为App Service计划付费,因此您不会节省任何钱,因为webjob不能连续运行。如果您想省钱,请看看将其作为Azure Function放在Consumption Plan上。
这样做确实省钱,因为您只有在函数运行时才付款。而且触发器可以直接使用,这很不错:)
使用消耗计划时,将根据传入事件的数量动态添加和删除Azure Functions主机的实例。该无服务器计划会自动扩展,并且仅在您的函数运行时才向您收取计算资源的费用。