当 azure 服务总线中有消息时,azure 触发的 webjob 不触发

Azure triggered webjob not triggering when there are message in azure service bus

我有一个应该是触发式网络作业的网络作业。我已将其部署到 azure,并且它被列为触发的 webjob。但是,当我将东西添加到它具有功能的 azure 服务总线时。当我从 UI 触发它时,它会工作并且会回复我的消息。

我的主机是这样配置的

var config = new JobHostConfiguration
        {
            JobActivator = new MyActivator(container)
        };
        config.UseServiceBus();
        var host = new JobHost(config);
        host.RunAndBlock();

我的函数看起来像这样

public  void ProcessQueueMessage([ServiceBusTrigger("recipetest")] ProductName message, TextWriter log)
    {
        //code
    }

我已经找了一段时间了,但所有 google 搜索都让我找回了带有函数触发器的连续网络作业。谁能告诉我如何让 Web 作业唤醒并处理消息。我发现大多数其他答案都在谈论永远在线,但触发的工作应该在不总是在线的情况下工作。

要使用 ServiceBusTrigger,您的 WebJob 必须是连续的。

要添加更多细节,如果没有找到消息,ServiceBusTriggerAttribute 实际上会使用回退轮询它监视的消息队列。因此,您可以看到添加到队列中的消息不会 "wake up" WebJob 并告诉它做某事 - 而是 ServiceBusTriggerAttribute 轮询并发现新消息何时等待处理。这就是使用 ServiceBusTriggerAttribute 时无法触发 WebJob 的原因。

在我看来,continuous webjob和trigger webjob的区别如下:

连续 web 作业:始终 运行 Web 应用程序中的后端 exe。

在 webjob SDK ServiceBusTrigger 场景中,即使您的个人功能是 'triggered',WebJob 也会持续一段时间 运行s(即您的 exe 保持 运行ning 并自己执行内部触发)。

触发的网络作业:按计划或手动触发。

注意:Web 作业都是 运行 由 Web 应用程序进程执行的,如果 Web 应用程序闲置一段时间,则会卸载它们。这使系统可以节省资源。

因此,连续和触发(计划的 CRON)网络作业都需要 'Always on'。