我试图找出是否可以运行手动调度的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被关闭。
是否有可能天蓝色的服务总线基础设施调用该过程?或者是一个持续的webjob总是要走的路。
提前致谢 !
webjob在App Service Plan上运行。而且,由于您已经为应用服务计划付费,因此您无法节省任何没有连续运行webjob的资金。如果你正在考虑省钱,看看你在Azure Function上把它作为Consumption Plan。
这确实可以省钱,因为你只需在功能运行时付款。并且触发器开箱即用,这很好:)
在使用“消耗”计划时,将根据传入事件的数量动态添加和删除Azure功能主机的实例。此无服务器计划会自动扩展,只有在您的功能运行时才需要为计算资源付费。