2017-05-10 70 views
1

我有一个应该是触发的web作业的web作业。我已经将它部署到了天蓝,它被列为触发的webjob。但是,当我将东西添加到它具有功能的天蓝色服务总线时。当我从UI触发它的作品,并会回复我的消息。当Azure服务总线上有消息时Azure触发webjob不触发

我的主机配置,像这样

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 
    } 

我一直在寻找了一段时间,但所有的谷歌搜索给了我回来了连续的网络工作函数触发器。任何人都可以告诉我如何让网络工作唤醒并处理消息。我发现大多数其他答案始终都在讨论,但是触发的工作应该始终在工作。

+1

是的,你需要一个连续的工作,“永远在线” – Thomas

回答

1

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

要添加更多的细节,ServiceBusTriggerAttribute实际上会在没有找到消息的情况下使用退避轮询它监视的消息队列。因此,您可以看到添加到队列中的消息不会“唤醒”WebJob并告诉它执行某些操作 - 而是使用ServiceBusTriggerAttribute轮询,并会在新消息等待处理时发现。这就是为什么如果您使用ServiceBusTriggerAttribute,WebJob不能触发。

+0

等待 - 它不像普通的服务总线队列客户端订阅?轮询对存储队列是必需的,但如果我需要实现任何远程响应,轮询就是一个杀手。 – Volker

+0

@Volker,这是正确的。 ServiceBusTrigger实际上是开源的,你可以亲自看到它实际上通过轮询来监视服务总线队列。尽管这实际上可以处理大量的流量。您可以指定一次可以排列多少个邮件。您还可以指定轮询之间的最大时间间隔。并且由于消息在读取时被锁定,如果您真的需要做饭,可以拨打检查队列的webjob实例的数量。 –

+0

我在哪里可以找到源代码?我从github获得了sdk和扩展,但我没有看到有关服务总线的任何信息。关于交通,我的担忧不是吞吐量,而是往返时间。 – Volker

2

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

连续webJob:始终运行在Web应用程序后端EXE。在Webjob SDK ServiceBusTrigger场景中,即使您的各个功能被“触发”,WebJob也会持续运行(即您的exe继续运行并执行其自己的内部触发)。

触发的webjob:按计划或手动触发。

注意:Webjobs全部由Web应用程序的进程运行,并且Web应用程序在空闲一段时间后会被卸载。这使系统节约资源。

因此连续和触发(计划的CRON)webjobs都需要“始终打开”。

相关问题