【问题标题】:How do I block receive requests on Azure Storage Queues如何阻止 Azure 存储队列上的接收请求
【发布时间】:2019-07-08 14:00:15
【问题描述】:

我目前有一个循环,我在其中轮询 Azure 存储队列,如下所示:

// Get the next messages
            var messages = await Queue.GetMessagesAsync(_messageBatchSize, lockTimeout, null, null);

我原以为这里的 await 会在返回之前阻塞一段可配置的时间,但目前它会立即返回,这会提示我们立即重新请求消息,因此我们最终会生成一个非常大的数字队列不忙时的请求数。

谁能告诉我 Azure 存储队列上是否有可用的阻塞等待方法?

【问题讨论】:

    标签: azure azure-storage-queues


    【解决方案1】:

    在下面,用于检索消息的 Azure 存储队列 API 调用只是一个简单的 REST GET。尽管您可以为调用本身指定超时,但不会进行阻塞 API 调用。您可以查看 REST API 详细信息here,其中您只能看到两个基于时间的设置:

    • 可见性超时(在队列消息重新出现在队列中以供其他消费者使用之前,您将使用多长时间)
    • 通话超时(最长 30 秒)

    如果调用返回零消息,您需要实施自己的退避策略类型。

    【讨论】:

    • 谢谢,我也是这么想的,如果没有回消息我们会等一段时间。
    • 如果你切换到服务总线队列,会有一个消息泵优雅地假冒云“推送”到你的应用程序(它仍在引擎盖下轮询,但更好,就像在单一麦芽威士忌与廉价俱乐部中一样拍摄) - github.com/Azure/azure-service-bus/blob/master/samples/DotNet/…
    • @evilSnobu - 真的。还有许多其他功能(发布/订阅、订购、最多一次交付、更大的消息、rbac ......),但也失去了一些东西(修改隐形租约的能力、设置和界面的简单性、更大消息存储...)。我认为两者之间的选择更加复杂和微妙(比如比较单一麦芽威士忌),这就是为什么我在这里只关注 Azure 队列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2019-06-01
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多