从Azure ServiceBus基础结构调用WebJob(不要连续运行WebJob)

时间:2018-09-03 13:53:36

标签: azure azureservicebus azure-webjobs

我试图找出是否可以运行手动安排的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基础结构是否有可能调用该过程?还是连续的网络作业始终是必经之路。

谢谢!

1 个答案:

答案 0 :(得分:2)

Webjob运行在应用程序服务计划上。而且,由于您已经为App Service计划付费,因此您不会节省任何钱,因为webjob不能连续运行。如果您想省钱,请看看将其作为Azure Function放在Consumption Plan上。

这样做确实省钱,因为您只有在函数运行时才付款。而且触发器可以直接使用,这很不错:)

  

使用消耗计划时,将根据传入事件的数量动态添加和删除Azure Functions主机的实例。该无服务器计划会自动扩展,并且仅在您的函数运行时才向您收取计算资源的费用。

此处有更多信息:Azure Service Bus bindings for Azure Functions