Azure服务总线中存在消息时Azure触发的webjob未触发

Azure服务总线中存在消息时Azure触发的webjob未触发,azure,azure-webjobs,azureservicebus,Azure,Azure Webjobs,Azureservicebus,我有一个网络作业,应该是触发的网络作业。我已经将其部署到azure fine,并将其列为触发的webjob。然而,当我向azure服务总线添加东西时,它有一个功能。当我从UI触发它时,它会工作并响应我的消息 我的主机是这样配置的 var config = new JobHostConfiguration { JobActivator = new MyActivator(container) }; config.UseServ

我有一个网络作业,应该是触发的网络作业。我已经将其部署到azure fine,并将其列为触发的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
    }

我已经找了一段时间了,但是所有的谷歌搜索都给我返回了带有函数触发器的连续网络作业。有人能告诉我如何让网络工作唤醒并处理信息吗。我发现大多数其他答案都是关于“始终打开”,但触发作业应该在没有“始终打开”的情况下工作。

要使用ServiceBusTrigger,您的Web作业必须是连续的


更详细地说,如果没有找到消息,ServiceBusTriggerAttribute实际上会使用回退轮询它监视的消息队列。因此,您可以看到,添加到队列中的消息不会“唤醒”WebJob并告诉它做些什么,而是ServiceBusTriggerAttribute轮询并在新消息等待处理时查找。这就是为什么在使用ServiceBusTriggerAttribute时无法触发WebJob

在我看来,连续webJob和触发webJob的区别如下:

连续webJob:始终在web应用程序中运行后端exe

在webjob SDK ServiceBustigger场景中,即使您的单个功能被“触发”,webjob也会持续运行(即您的exe保持运行并执行其自身的内部触发)

触发的webjob:由计划或手动触发

注意:WebJob都由web应用程序的进程运行,如果web应用程序闲置一段时间,则会卸载它们。这让系统节省了资源


因此,连续和触发(定时CRON)Web作业都需要“始终打开”。

是的,您需要一个“始终打开”等待的连续作业-它不像正常的服务总线队列客户端那样订阅?轮询对于存储队列是必要的,但如果我需要实现任何远程响应的功能,轮询就是一个杀手。@Volker,没错。ServiceBustigger实际上是开源的,您可以亲眼看到它确实通过轮询监视服务总线队列。这实际上可以处理大量的流量。您可以指定一次可以将多少消息移出队列。您还可以指定轮询之间的最大间隔。而且,由于邮件在读取时被锁定,如果您确实需要烹饪,您可以拨打检查队列的webjob实例数。我在哪里可以找到源代码?我从github获得了sdk和扩展,但是我没有看到任何关于servicebus的内容。关于流量,我关心的不是吞吐量,而是往返时间。@Volker,触发器的来源在这里:。请注意,有相当多的类组成ServiceBus触发器。至于往返时间,我的两分钱是为了确保您的webjob与您的服务总线队列位于同一数据中心,以减少延迟,并将最大轮询间隔设置为较小的值。不过,这样做会增加你的财务成本。