我有一个WebJob,当用户将文件上传到blob存储时触发 - 它由队列存储消息触发,该消息在上传完成后创建。
根据文件的用途,它将向其他队列发送消息以触发处理作业。
这些作业中的一些是时间关键的,并且运行相对较快。在一种情况下,处理过程需要大约三秒钟,用户正在等待结果。
但是,因为最小队列轮询间隔是2秒,所以用户必须等待两个WebJobs被调用的时间通常是等待时间的两倍。
我尝试将两个WebJobs合并成一个,希望当第一个处理程序发送队列消息时,相应的处理处理程序会立即被触发,但事实上,它总是等待两秒钟才接收到消息。
我的问题是,如果我知道有消息在等待,有没有办法告诉我的WebJob立即从同一WebJob中检查队列触发器?或者更好的配置是,如果我从WebJob内部发布到队列,请立即检查队列触发器?
或者,切换到服务总线队列会提高对新消息的响应吗?
使现代化
在关于使用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 比队列更好,这似乎是错误的。
更新2
我最终通过将编排代码从第一个 WebJob 中提取出来并放入应用程序的服务层并删除 WebJob 来解决此问题。无论如何,它运行得很快,所以也许把它分离成自己的WebJob是一种过度的杀伤力。这意味着在文件上传后,只需触发处理 WebJob。
目前,2 秒是 SDK 轮询新消息所需的最短时间。SDK 执行指数退避轮询,因此您可以将 MaxPollingInterval 配置为始终为 2 秒。配置。Queues.MaxPollingInterval = TimeSpan.FromSeconds(15);
更多详情请见http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#config
我有Spring Cloud Stream Rabbit项目,它将消息发送到兔子交换以防流中出现错误。我想定期(5分钟一次)从队列中监听并处理它。 有什么方法可以让我有一个可轮询的?或者我可以配置一个RabbitMQ,这样我就可以用轮询器构建一个?
需求:构建一个基于。NET的应用程序,该应用程序可以定期从IBM Websphere消息队列读取消息,并将这些消息保存到数据库中
Nuttx工作线程(LP和HP)具有轮询间隔,仅针对工作线程0。我想知道为什么需要轮询间隔? 当有人将一个新工作排入工作队列时,将向一个辅助线程发出处理它的信号。如果所有工作线程都忙,则当线程完成当前工作并再次检查队列时,将处理排队的工作。 与sched_garbage_collection()工作一样,工作线程由sched_signal_free()发出信号。 那么当需要轮询间隔时会是什么情况呢
问题 你有一个线程队列集合,想为到来的元素轮询它们, 就跟你为一个客户端请求去轮询一个网络连接集合的方式一样。 解决方案 对于轮询问题的一个常见解决方案中有个很少有人知道的技巧,包含了一个隐藏的回路网络连接。 本质上讲其思想就是:对于每个你想要轮询的队列,你创建一对连接的套接字。 然后你在其中一个套接字上面编写代码来标识存在的数据, 另外一个套接字被传给 select() 或类似的一个轮询数据到达
如何轮询azure服务总线以持续检查消息?下面是我从队列接收消息的方式。 我想不断地寻找信息,然后处理它。
我是Azure服务总线的新手,我发现需要持续轮询队列消息才能接收它们。然而,我希望队列将消息推送给客户端的某种侦听器,而不必轮询消息。 我已经读到,在Azure服务总线中轮询是可选的,但如果没有它,我无法找到如何接收消息。 如果可以的话,请帮忙。谢谢你们