首页 文章

Azure WebJobs可以根据需要轮询队列吗?

提问于
浏览
3

我有一个WebJob,当用户将文件上传到blob存储时会触发它 - 它是由上传完成后创建的队列存储消息触发的 .

根据文件的用途,它会将消息发布到其他队列以触发处理作业 .

其中一些工作是时间关键的,并且运行相对较快 . 在一种情况下,处理大约需要三秒钟,并且用户正在等待结果 .

但是,由于最小队列轮询间隔为2秒,因此用户必须等待调用两个WebJobs的时间通常会使其等待时间加倍 .

我尝试将两个WebJobs合并为一个,希望当第一个处理程序发布队列消息时,相应的处理处理程序将立即被触发,但实际上它在获取消息之前始终等待两秒钟 .

我的问题是,如果我知道有消息在等待,我有没有办法告诉我的WebJob立即从同一个WebJob中检查队列触发器?或者甚至更好地配置它以便在我从WebJob内部发布到队列时立即检查队列触发器?

或者切换到服务总线队列可以提高对新消息的响应能力?

Update

在关于使用blob触发器的文档中,它说:

使用Blob属性创建的blob有一个例外 . 当WebJobs SDK创建新blob时,它会立即将新blob传递给任何匹配的BlobTrigger函数 . 因此,如果您有一系列blob输入和输出,SDK可以有效地处理它们 . 但是,如果您希望为通过其他方式创建或更新的blob运行Blob处理函数的低延迟,我们建议使用QueueTrigger而不是BlobTrigger .

http://azure.microsoft.com/en-gb/documentation/articles/websites-dotnet-webjobs-sdk-storage-blobs-how-to/

然而,没有提到任何类似的队列 . 这意味着如果你在这种情况下需要非常低的延迟,那么blob比队列更好,这似乎是错误的 .

Update 2

我最终通过将编排代码从第一个WebJob中拉出到应用程序的服务层并移除WebJob来解决这个问题 . 无论如何它都在快速运行,所以将它分成它自己的WebJob可能是一种过度杀伤力 . 这意味着在文件上载后只需要触发处理WebJob .

1 回答

相关问题